import jenkins.model.Jenkins
import jenkins.security.ApiTokenProperty
import jenkins.security.apitoken.*

println "=====L3_4_MINT_API_TOKEN_RETRY====="
try {
  def adminUser = Jenkins.instance.getUser("admin")
  def prop = adminUser.getProperty(ApiTokenProperty)
  println "prop_class: ${prop.class.name}"

  // Try via property's token store
  try {
    def store = prop.getTokenStore()
    println "store_class: ${store.class.name}"
    def result = store.addNewToken("scope-test-2026-09-29")
    println "TOKEN_MINTED: YES"
    println "TOKEN_NAME: scope-test-2026-09-29"
    println "TOKEN_VALUE: ${result.plainValue}"
    println "TOKEN_UUID: ${result.token.uuid}"
  } catch(Exception e2) {
    println "store_addNewToken_err: ${e2.class.name}: ${e2.message}"
    // Try static method with correct args
    try {
      def result = ApiTokenStore.generateNewToken(adminUser, "scope-test-2026-09-29")
      println "TOKEN_MINTED: YES (static)"
      println "TOKEN_VALUE: ${result.plainValue}"
      println "TOKEN_UUID: ${result.token.uuid}"
    } catch(Exception e3) {
      println "static_err: ${e3.class.name}: ${e3.message}"
      // Legacy fallback: existing apiToken
      try {
        def legacyToken = prop.getApiToken()
        println "LEGACY_TOKEN: ${legacyToken}"
      } catch(Exception e4) {
        println "legacy_err: ${e4.message}"
        // List methods for debug
        println "prop_methods:"
        prop.class.methods.each { m ->
          if (m.name.toLowerCase().contains("token")) println "  ${m.name}(${m.parameterTypes*.simpleName.join(',')})"
        }
      }
    }
  }
} catch(Exception e) {
  println "TOKEN_MINT_ERR: ${e.class.name}: ${e.message}"
}

println "=====DONE====="
