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["ZohoSalesIQMobilisten_kotlinVersion"]

    repositories {
        google()
        mavenCentral()
    }

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

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"
}

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

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

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

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

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
}

def rnVersion = "0.0.0"
def rnPackageJson = file("${rootDir}/../node_modules/react-native/package.json")

if (rnPackageJson.exists()) {
    def versionLine = rnPackageJson.readLines().find { it.contains('"version"') }
    if (versionLine) {
        def matcher = versionLine =~ /"version"\s*:\s*"([0-9.]+)"/
        if (matcher.find()) {
            rnVersion = matcher.group(1)
        }
    }
}

def versionParts = rnVersion.tokenize('.').collect { it.toInteger() }
def major = versionParts.size() > 0 ? versionParts[0] : 0
def minor = versionParts.size() > 1 ? versionParts[1] : 0
def isReactNative72OrLower = rnVersion.equalsIgnoreCase("0.0.0") ? false : (major < 1 && minor < 73)

android {
    if (supportsNamespace()) {
        namespace "com.zohosalesiq.reactlibrary"

        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()
        buildConfigField "boolean", "IS_REACT_NATIVE_72_OR_LOWER", "${isReactNative72OrLower}"

    }

    buildFeatures {
        buildConfig true
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }

    lintOptions {
        disable "GradleCompatible"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

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

repositories {
    mavenCentral()
    google()
}

def kotlin_version = getExtOrDefault("kotlinVersion")

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:+"
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    api project(':react-native-zohosalesiq_mobilisten-core')
    api 'com.zoho.salesiq:mobilisten:8.3.10'
}

if (isNewArchitectureEnabled()) {
    react {
        jsRootDir = file("../src/")
        libraryName = "RNZohoSalesIQMobilisten"
        codegenJavaPackageName = "com.zohosalesiq.reactlibrary"
    }
}
