import groovy.json.JsonSlurper
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

apply plugin: 'com.android.library'
// AGP 9 registers Kotlin itself unless the consumer opts out.
if (project.extensions.findByName('kotlin') == null) {
  apply plugin: 'kotlin-android'
}

group = 'expo.modules.iap'

def resolvePackageJsonFile() {
  def packageJsonFile = new File(projectDir.parentFile, 'package.json')
  if (!packageJsonFile.isFile()) {
    throw new GradleException("expo-iap: Unable to locate package.json")
  }
  return packageJsonFile
}

def expoIapPackageJson = new JsonSlurper().parse(resolvePackageJsonFile())
def expoIapPackageVersion = (expoIapPackageJson instanceof Map) ? expoIapPackageJson.version : null
if (!(expoIapPackageVersion instanceof String) || !expoIapPackageVersion.trim()) {
  throw new GradleException("expo-iap: 'version' missing or invalid in package.json")
}
expoIapPackageVersion = expoIapPackageVersion.trim()
version = expoIapPackageVersion

def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
apply from: expoModulesCorePlugin
applyKotlinExpoModulesCorePlugin()
useCoreDependencies()
useExpoPublishing()

def resolveOpenIapVersionsFile() {
  def candidates = [
    new File(projectDir.parentFile, 'openiap-versions.json'),
    new File(rootDir.parentFile ?: rootDir, 'openiap-versions.json'),
    new File(rootProject.projectDir.parentFile ?: rootProject.projectDir, 'openiap-versions.json')
  ]
  return candidates.find { it.exists() }
}

def openiapVersionsFile = resolveOpenIapVersionsFile()
if (openiapVersionsFile == null) {
  throw new GradleException("expo-iap: Unable to locate openiap-versions.json")
}

def openiapVersions = new JsonSlurper().parse(openiapVersionsFile)
def googleVersion = (openiapVersions instanceof Map) ? openiapVersions.google : null
if (!(googleVersion instanceof String) || !googleVersion.trim()) {
  throw new GradleException("expo-iap: 'google' version missing or invalid in openiap-versions.json")
}
def googleVersionString = googleVersion.trim()
apply from: project.file('openiap-android-sdk.gradle')

// Store selection: explicit property > task flavor > connected debug device > play.
apply from: project.file('openiap-store.gradle')
def openiapSelection = openIapResolveStore('expo-iap')
def openiapFlavor = openiapSelection.store

// If you want to use the managed Android SDK versions from expo-modules-core, set this to true.
// The Android SDK versions will be bumped from time to time in SDK releases and may introduce breaking changes in your module code.
// Most of the time, you may like to manage the Android SDK versions yourself.
def useManagedAndroidSdkVersions = false
if (useManagedAndroidSdkVersions) {
  useDefaultAndroidSdkVersions()
} else {
  def openIapCompileSdkVersion = openIapResolveAndroidSdkVersion('compileSdkVersion', 'compileSdk', 36)
  def openIapMinSdkVersion = openIapResolveAndroidSdkVersion('minSdkVersion', 'minSdk', 23)
  def openIapTargetSdkVersion = openIapResolveAndroidSdkVersion('targetSdkVersion', 'compileSdk', 36)

  project.android {
    compileSdk = openIapCompileSdkVersion
    defaultConfig {
      minSdk = openIapMinSdkVersion
      targetSdk = openIapTargetSdkVersion
    }
  }
}

android {
  namespace = "expo.modules.iap"
  buildFeatures {
    buildConfig = true
  }
  defaultConfig {
    versionCode = 1
    versionName = expoIapPackageVersion
    // When using local openiap-google with flavors, select the appropriate flavor
    missingDimensionStrategy "platform", openiapSelection.platform
  }
  testOptions {
    unitTests.includeAndroidResources = true
  }
  lint {
    abortOnError = false
  }
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
  }
}

kotlin {
  compilerOptions {
    jvmTarget.set(JvmTarget.JVM_17)
    freeCompilerArgs.add("-Xskip-metadata-version-check")
  }
}

dependencies {
    testImplementation "junit:junit:4.13.2"
    testImplementation "org.robolectric:robolectric:4.16.1"
    testImplementation "org.json:json:20260719"

    openIapAddStoreDependencies('api', googleVersionString, ':openiap-google')
}
