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["NevisMobileAuthenticationSdkReact_kotlinVersion"]
	def agp_version = rootProject.ext.has("agpVersion") ? rootProject.ext.get("agpVersion") : project.properties["NevisMobileAuthenticationSdkReact_agpVersion"]

	repositories {
		google()
		mavenCentral()
	}

	dependencies {
		classpath "com.android.tools.build:gradle:$agp_version"
		// noinspection DifferentKotlinGradleVersion
		classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
		classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
	}
}

apply plugin: "com.android.library"
apply plugin: "kotlin-android"
apply plugin: 'kotlinx-serialization'

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

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

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

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

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


android {
	namespace "ch.nevis.mobile.authentication.sdk.react"

	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()
		ndk {
			abiFilters (*reactNativeArchitectures())
		}
	}

	buildFeatures {
		buildConfig true
	}

	buildTypes {
		release {
			minifyEnabled false
		}
	}

	lintOptions {
		disable "GradleCompatible"
	}

	sourceSets {
		main {
			if (isNewArchitectureEnabled()) {
				java.srcDirs += [
					"src/newarch",
				]
			} else {
				java.srcDirs += ["src/oldarch"]
			}
		}
	}
}

kotlin {
	jvmToolchain(17)
}

repositories {
	mavenCentral()
	google()
}

def kotlin_version = getExtOrDefault("kotlinVersion")

dependencies {
	//noinspection GradleDynamicVersion
	debugCompileOnly 'ch.nevis:nevis-mobile-authentication-sdk-android-debug:3.9.+'
	//noinspection GradleDynamicVersion
	releaseCompileOnly 'ch.nevis:nevis-mobile-authentication-sdk-android:3.9.+'

	// 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:+"
	implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

	implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1'
}

if (isNewArchitectureEnabled()) {
	react {
		jsRootDir = file("../src/")
		libraryName = "NevisMobileAuthenticationSdkReact"
		codegenJavaPackageName = "ch.nevis.mobile.authentication.sdk.react"
	}
}

print "New architecture for the React Native Module is: ${isNewArchitectureEnabled() ? 'enabled' : 'disabled'}\n"
