apply plugin: 'com.android.library'

// Import autolinking script
apply from: "../scripts/autolinking.gradle"

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

static def versionToNumber(major, minor, patch) {
  return patch * 100 + minor * 10000 + major * 1000000
}

def getRNVersion() {
  def nodeModulesVersion = providers.exec {
    workingDir(projectDir)
    commandLine("node", "-e", "console.log(require('react-native/package.json').version);")
  }.standardOutput.asText.get().trim()

  def version = safeExtGet("reactNativeVersion", nodeModulesVersion)
  def coreVersion = version.split("-")[0]
  def (major, minor, patch) = coreVersion.tokenize('.').collect { it.toInteger() }

  return versionToNumber(
      major,
      minor,
      patch
  )
}

ensureDependeciesWereEvaluated(project)

group = 'host.exp.exponent'
version = '51.0.39'

buildscript {
  // Simple helper that allows the root project to override versions declared by this library.
  ext.safeExtGet = { prop, fallback ->
    rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
  }
}

android {
  namespace "expo.core"
  defaultConfig {
    versionCode 1
    versionName "51.0.39"
    consumerProguardFiles("proguard-rules.pro")
  }
  testOptions {
    unitTests.includeAndroidResources = true
  }

  sourceSets {
    main {
      java {
        srcDirs += new File(project.buildDir, generatedFilesSrcDir)

        def rnVersion = getRNVersion()
        if (rnVersion >= versionToNumber(0, 74, 0)) {
          srcDirs += "src/reactWrappers"
        }
      }
    }
  }
}

dependencies { dependencyHandler ->
  implementation 'com.facebook.react:react-android'

  testImplementation 'junit:junit:4.13.2'
  testImplementation 'androidx.test:core:1.5.0'
  testImplementation "com.google.truth:truth:1.1.2"
  testImplementation 'io.mockk:mockk:1.13.5'

  // Link expo modules as dependencies of the adapter. It uses `api` configuration so they all will be visible for the app as well.
  // A collection of the dependencies depends on the options passed to `useExpoModules` in your project's `settings.gradle`.
  addExpoModulesDependencies(dependencyHandler, project)
}

// A task generating a package list of expo modules.
task generateExpoModulesPackageListTask {
  def modulesConfig = getModulesConfig()
  def outputPath = getGenerateExpoModulesPackagesListPath()
  if (modulesConfig) {
    outputs.file(file(outputPath))
    inputs.property("modulesConfig", modulesConfig)
  }

  // TOOD(@lukmccall): fix not working with configuration cache enabled
  doLast {
    generateExpoModulesPackageList()
  }
}

// Run that task during prebuilding phase.
preBuild.dependsOn "generateExpoModulesPackageListTask"
