import com.android.Version

buildscript {
    ext {
        gradle_version = '8.3.2'
        document_detector_version = '9.4.1'
        constraint_layout_version = '2.1.4'
    }

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

    repositories {
        google()
        mavenCentral()
    }

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

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

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

def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') }

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

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

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

static def supportsNamespace() {
    def parsed = 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 {
    if (supportsNamespace()) {
        namespace "io.caf.documentdetector"

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

    compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")

    defaultConfig {
        minSdkVersion getExtOrIntegerDefault("minSdkVersion")
        targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }

    lintOptions {
        disable "GradleCompatible"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    aaptOptions {
        noCompress "tflite"
    }

    rootProject.allprojects {
        repositories {
            maven { url "https://repo.combateafraude.com/android/release" }
            maven { url 'https://jitpack.io' }
        }
    }
}

repositories {
    maven { url "https://plugins.gradle.org/m2/" }
    mavenCentral()
    google()
}

def kotlin_version = getExtOrDefault("kotlinVersion")

//region Tasks for extract content
def aarFilePath = "./libs/dd-bridge-release.aar"
def extractDir = "./cafTemp"

def cafProcessorFile = file("./libs/processor.jar")
def cafClassesFile = file("./libs/classes.jar")
def cafTempDir = file(extractDir)

tasks.register("extractAarContents", Copy) {
    onlyIf { !cafProcessorFile.exists() && !cafClassesFile.exists() }
    from zipTree(aarFilePath)
    into extractDir
}

tasks.register("cleanAarContents", Delete) {
    onlyIf { cafTempDir.isDirectory() && cafTempDir.exists() }
    delete extractDir
}

tasks.register("copyJarFiles", Copy) {
    onlyIf { !cafProcessorFile.exists() && !cafClassesFile.exists() }
    from fileTree(dir: "${extractDir}/libs", include: '*.jar')
    from fileTree(dir: "${extractDir}", include: '*.jar')
    into "./libs"
    dependsOn extractAarContents
    finalizedBy cleanAarContents
}

gradle.allprojects { project ->
    project.tasks.matching {
        it.name == "preBuild"
    }.configureEach { preBuildTask ->
        preBuildTask.dependsOn copyJarFiles
    }
}
//endregion

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    // 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 "io.caf.sdk:document-detector:$document_detector_version"
    implementation "androidx.constraintlayout:constraintlayout:$constraint_layout_version"
}
