buildscript {
    ext.getExtOrFallback = { name, fallback ->
        rootProject.ext.has(name) ? rootProject.ext.get(name) : fallback
    }

    ext.getExtOrDefault = { name ->
        getExtOrFallback(name, project.properties["KlarnaMobileSDKRN_" + name])
    }

    repositories {
        google()
        gradlePluginPortal()
        mavenCentral()
    }

    dependencies {
        classpath "com.android.tools.build:gradle:${getExtOrDefault('gradlePluginVersion')}"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
    }
}

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

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

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

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
  if (major == 7 && minor >= 3) {
    return true
  }

  return major >= 8
}

plugins {
    id "org.jetbrains.kotlin.plugin.serialization" version "1.9.25"
}
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
if (isNewArchitectureEnabled()) {
  apply plugin: "com.facebook.react"
}

android {
    if (supportsNamespace()) {
        namespace "com.klarna.mobile.sdk.reactnative"

        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()
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
    lintOptions {
        abortOnError false
        disable "GradleCompatible"
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    sourceSets {
        main {
            if (isNewArchitectureEnabled()) {
                java.srcDirs += ["src/newarch/java"]
            } else {
                java.srcDirs += ["src/oldarch/java"]
            }
        }
    }
}

repositories {
    mavenCentral()
    google()
    maven {
        url 'https://x.klarnacdn.net/mobile-sdk/'
    }
}

dependencies {
    // For < 0.71, this will be from the local maven repo
    // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
    //noinspection GradleDynamicVersion
    implementation "com.facebook.react:react-native:${getExtOrFallback('reactnativeVersion', '+')}"

    implementation "org.jetbrains.kotlin:kotlin-stdlib:${getExtOrDefault('kotlinVersion')}"
    implementation "org.jetbrains.kotlin:kotlin-reflect:${getExtOrDefault('kotlinVersion')}"
    implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3'

    implementation 'com.klarna.mobile:sdk:2.11.3'
    // Required: KlarnaExpressCheckoutButton extends ConstraintLayout.
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

    testImplementation "junit:junit:4.13.2"
    testImplementation 'androidx.test:core:1.5.0'
    testImplementation "org.robolectric:robolectric:4.11.1"
    testImplementation "org.mockito:mockito-core:3.12.4"
    testImplementation "org.mockito:mockito-inline:3.12.4"
    testImplementation "org.jetbrains.kotlin:kotlin-test-junit:${getExtOrDefault('kotlinVersion')}"
    testImplementation "io.mockk:mockk:1.14.5"
}

// removed from the docs but we can keep it
// https://reactnative.dev/docs/0.71/new-architecture-library-intro
if (isNewArchitectureEnabled()) {
  react {
    jsRootDir = file("../src/specs")
    libraryName = "RNKlarnaMobileSDK"
    codegenJavaPackageName = "com.klarna.mobile.sdk.reactnative"
  }
}
