buildscript {
  // Buildscript is evaluated before everything else so we can't use getExtOrDefault
  def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['AvoidSoftinput_kotlinVersion']

  repositories {
    google()
    mavenCentral()
  }

  dependencies {
    classpath("com.android.tools.build:gradle:8.5.0")
    // noinspection DifferentKotlinGradleVersion
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "com.diffplug.spotless:spotless-plugin-gradle:6.25.0"
  }
}

if (project == rootProject) {
  apply from: 'spotless.gradle'
}

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'

def safeAppExtGet(prop, fallback) {
  def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') }
  appProject?.ext?.has(prop) ? appProject.ext.get(prop) : fallback
}

def resolveReactNativeDirectory() {
  def reactNativeLocation = safeAppExtGet("REACT_NATIVE_NODE_MODULES_DIR", null)
  if (reactNativeLocation != null) {
    return file(reactNativeLocation)
  }

  def reactNativeFromAppNodeModules = file("${projectDir}/../../react-native")
  if (reactNativeFromAppNodeModules.exists()) {
    return reactNativeFromAppNodeModules
  }

  def reactNativeFromProjectNodeModules = file("${rootProject.projectDir}/../node_modules/react-native")
  if (reactNativeFromProjectNodeModules.exists()) {
    return reactNativeFromProjectNodeModules
  }

  def reactNativeFromRootWorkspaceNodeModules = file("${rootProject.projectDir}/../../../node_modules/react-native")
  if (reactNativeFromRootWorkspaceNodeModules.exists()) {
    return reactNativeFromRootWorkspaceNodeModules
  }

  throw new GradleException(
    "[RNAvoidSoftInput] Unable to resolve react-native location in node_modules. You should add project extension property (in `app/build.gradle`) `REACT_NATIVE_NODE_MODULES_DIR` with path to react-native."
  )
}

// Do not apply react plugin when running directly (e.g. when running Spotless/ktfmt)
if (project != rootProject) {
  apply plugin: "com.facebook.react"

  def reactNativeDirectory = resolveReactNativeDirectory()

  react {
    reactNativeDir = file(reactNativeDirectory)
    codegenDir = file("${file(reactNativeDirectory).getParentFile()}/react-native-codegen")
  }
}

def getExtOrDefault(name) {
  return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['AvoidSoftinput_' + name]
}

def getExtOrIntegerDefault(name) {
  return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties['AvoidSoftinput_' + name]).toInteger()
}

def reactNativeArchitectures() {
  def value = project.getProperties().get("reactNativeArchitectures")
  return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
}

def supportsNamespace() {
  def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
  def major = parsed[0].toInteger()
  def minor = parsed[1].toInteger()

  // Namespace support was added in 7.3.0
  return (major == 7 && minor >= 3) || major >= 8
}

android {
  compileSdkVersion getExtOrIntegerDefault('compileSdkVersion')

  if (supportsNamespace()) {
    namespace "com.reactnativeavoidsoftinput"

    sourceSets {
      main {
        manifest.srcFile "src/main/AndroidManifestNew.xml"
      }
    }
  }

  buildFeatures {
    buildConfig = true
  }

  defaultConfig {
    minSdkVersion 21
    targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
    versionCode 1
    versionName "1.0"
  }

  sourceSets {
    main {
      java.srcDirs += ["${project.buildDir}/generated/source/codegen/java"]
    }
  }

  buildTypes {
    release {
      minifyEnabled false
    }
  }

  lintOptions {
    disable 'GradleCompatible'
  }

  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

repositories {
  mavenCentral()
  google()
}

def kotlin_version = getExtOrDefault('kotlinVersion')
def kotlin_coroutines_version = getExtOrDefault('kotlinCoroutinesVersion')
def androidX_core_ktx_version = getExtOrDefault('androidXCoreKtxVersion')

dependencies {
  implementation "com.facebook.react:react-android" // Set by the React Native Gradle Plugin
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version"
  implementation "androidx.core:core-ktx:$androidX_core_ktx_version"
}
