apply from: "dependency-handler.gradle"

ext.hyperDependencies = initializeHyperswitchDependencies()

buildscript {
  def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["HyperswitchSdkReactNative_kotlinVersion"]

  repositories {
    google()
    mavenCentral()
    maven { url "https://x.klarnacdn.net/mobile-sdk/" }
    maven { url "https://maven.hyperswitch.io" }
    maven { url "https://maven.juspay.in/hyper-sdk/" }
    maven { url "$rootDir/maven/" }
    maven { url "https://jitpack.io" }
  }

  dependencies {
    classpath "com.android.tools.build:gradle:8.9.1"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  }
}

allprojects {
  repositories {
    google()
    mavenCentral()
    maven { url "https://x.klarnacdn.net/mobile-sdk/" }
    maven { url "https://maven.hyperswitch.io" }
    maven { url "https://maven.juspay.in/hyper-sdk/" }
    maven { url "$rootDir/maven/" }
    maven { url "https://jitpack.io" }
  }
}

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

def isNewArchitectureEnabled() {
  return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
}

apply plugin: "com.android.library"
apply plugin: "kotlin-android"
apply plugin: "kotlin-parcelize"

if (isNewArchitectureEnabled()) {
  apply plugin: "com.facebook.react"
}

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

def getExtOrIntegerDefault(name) {
  return getExtOrDefault(name).toInteger()
}

def supportsNamespace() {
  def (major, minor) = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.').collect { it.toInteger() }
  return (major == 7 && minor >= 3) || major >= 8
}

android {
  if (supportsNamespace()) {
    namespace "com.hyperswitchsdkreactnative"
    sourceSets.main.manifest.srcFile "src/main/AndroidManifestNew.xml"
  }

  compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")

  defaultConfig {
    minSdkVersion getExtOrIntegerDefault("minSdkVersion")
    targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
    buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
  }

  buildFeatures { buildConfig true }

  buildTypes {
    release { minifyEnabled false }
  }

  lintOptions { disable "GradleCompatible" }

  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

  sourceSets {
    main {
      java.srcDirs += isNewArchitectureEnabled() ? ["src/newarch", "${project.buildDir}/generated/source/codegen/java"] : ["src/oldarch"]
    }
  }
}

def kotlin_version = getExtOrDefault("kotlinVersion")

dependencies {
  implementation "com.facebook.react:react-native:+"
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
  implementation "com.google.android.gms:play-services-wallet:19.2.1"
  // Core dependencies that should always be included
  implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1"
  implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1"
  implementation "androidx.activity:activity-ktx:1.6.1"
  implementation 'org.greenrobot:eventbus:3.3.1'
  // Hyperswitch dependencies which will be added dynamically
  if (project.ext.has('hyperDependencies')) {
      project.ext.hyperDependencies.each { dep ->
          implementation project(":${dep}")
      }
  }
}

if (isNewArchitectureEnabled()) {
  react {
    jsRootDir = file("../src/")
    libraryName = "HyperswitchSdkReactNativeView"
    codegenJavaPackageName = "com.hyperswitchsdkreactnative"
  }
}


//def scriptPath = "../../../@react-native-community/cli-platform-android/native_modules.gradle"
def scriptPath = "./native_modules.gradle"
if (file(scriptPath).exists()) {
  try {
    println("running native modules script")
    apply from: file(scriptPath);
    applyNativeModulesAppBuildGradle(project)
  } catch (Exception ex) {
    println(ex.message)
  }
}
