plugins {
    id 'com.android.application' version '7.1.3' apply false
    id 'com.android.library' version '7.1.3' apply false
    id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.6.10'
}

apply plugin: 'com.android.application'
apply plugin: 'org.jetbrains.kotlin.android'
apply plugin: "kotlin-kapt"

android {

    compileSdk = 32
    defaultConfig {
        archivesBaseName = 'droidify'
        applicationId = 'com.looker.droidify'
        minSdk = 23
        targetSdk = 32
        versionCode = 43
        versionName = "0.4.3"
        vectorDrawables.useSupportLibrary = true

        javaCompileOptions {
            annotationProcessorOptions {
                arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
                arguments += ["room.incremental": "true"]
            }
        }
    }

    sourceSets.all {
        def javaDir = it.java.srcDirs.find { it.name == 'java' }
        it.java.srcDirs += new File(javaDir.parentFile, 'kotlin')
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget = '11'
        freeCompilerArgs = ['-Xjvm-default=compatibility']
    }

    buildFeatures {
        compose true
        dataBinding true
    }

    composeOptions {
        kotlinCompilerExtensionVersion "1.2.0-alpha07"
    }

    buildTypes {
        debug {
            minifyEnabled = false
            shrinkResources = false
            applicationIdSuffix = ".debug"
            versionNameSuffix = "-alpha2"
            resValue "string", "application_name", "Neo Store-Debug"
            manifestPlaceholders = [
                    appIcon     : "@mipmap/ic_launcher_debug",
                    appIconRound: "@mipmap/ic_launcher_round_debug"
            ]
        }
        neo {
            minifyEnabled = false
            shrinkResources = false
            applicationIdSuffix = ".neo"
            versionNameSuffix = "-alpha2"
            resValue "string", "application_name", "Neo Store-alpha"
            manifestPlaceholders = [
                    appIcon     : "@mipmap/ic_launcher_debug",
                    appIconRound: "@mipmap/ic_launcher_round_debug"
            ]
        }
        release {
            minifyEnabled = true
            shrinkResources = true
            resValue "string", "application_name", "Neo Store"
            manifestPlaceholders = [
                    appIcon     : "@mipmap/ic_launcher",
                    appIconRound: "@mipmap/ic_launcher_round"
            ]
        }
        all {
            crunchPngs = false
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard.pro")
        }
    }
    packagingOptions {
        jniLibs {
            excludes += ['/okhttp3/internal/publicsuffix/*']
        }
        resources {
            excludes += ['/DebugProbesKt.bin', '/kotlin/**.kotlin_builtins', '/kotlin/**.kotlin_metadata', '/META-INF/**.kotlin_module', '/META-INF/**.pro', '/META-INF/**.version', '/okhttp3/internal/publicsuffix/*']
        }
    }


    def keystorePropertiesFile = rootProject.file('keystore.properties')
    lint {
        ignore 'InvalidVectorPath'
        warning 'InvalidPackage'
    }
    if (keystorePropertiesFile.exists()) {
        def keystoreProperties = new Properties()
        keystoreProperties.load(keystorePropertiesFile.newDataInputStream())

        def signing = [
                storeFile    : keystoreProperties['store.file'],
                storePassword: keystoreProperties['store.password'],
                keyAlias     : keystoreProperties['key.alias'],
                keyPassword  : keystoreProperties['key.password']
        ]

        if (!signing.any { _, v -> v == null }) {
            signingConfigs {
                primary {
                    storeFile = file(signing.storeFile)
                    storePassword = signing.storePassword
                    keyAlias = signing.keyAlias
                    keyPassword = signing.keyPassword
                    v2SigningEnabled = false
                }
            }

            buildTypes {
                debug.signingConfig = signingConfigs.primary
                release.signingConfig = signingConfigs.primary
            }
        }
    }
}

dependencies {

    // Core
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10'
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'androidx.fragment:fragment-ktx:1.5.0-alpha04'
    implementation 'androidx.activity:activity-ktx:1.6.0-alpha01'
    implementation "androidx.preference:preference-ktx:1.2.0"
    implementation "androidx.navigation:navigation-fragment-ktx:2.5.0-alpha03"
    implementation "androidx.navigation:navigation-ui-ktx:2.5.0-alpha03"

    // Material3
    implementation 'com.google.android.material:material:1.6.0-beta01'

    // Coil
    implementation 'io.coil-kt:coil:2.0.0-rc02'
    implementation 'io.coil-kt:coil-compose:2.0.0-rc02'

    // OkHttps
    implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.6'

    // RxJava
    implementation 'io.reactivex.rxjava3:rxjava:3.1.4'
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'

    implementation 'me.zhanghai.android.fastscroll:library:1.1.7'

    // LibSu
    implementation 'com.github.topjohnwu.libsu:core:3.2.1'

    // JSON
    implementation 'com.fasterxml.jackson.core:jackson-core:2.13.2'
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2"

    // Markdown
    implementation 'org.jetbrains:markdown:0.3.1'

    // Coroutines / Lifecycle
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.0-alpha05'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'

    // Room
    implementation 'androidx.room:room-runtime:2.4.2'
    implementation 'androidx.room:room-ktx:2.4.2'
    implementation 'androidx.room:room-rxjava3:2.4.2'
    kapt 'androidx.room:room-compiler:2.4.2'

    // Compose
    implementation "androidx.compose.runtime:runtime:1.2.0-alpha07"
    implementation "androidx.compose.ui:ui:1.2.0-alpha07"
    implementation "androidx.compose.ui:ui-tooling:1.2.0-alpha07"
    implementation "androidx.compose.foundation:foundation:1.2.0-alpha07"
    implementation "androidx.compose.runtime:runtime-livedata:1.2.0-alpha07"
    implementation "androidx.compose.material3:material3:1.0.0-alpha09"
    implementation "androidx.compose.material:material:1.2.0-alpha07"
    implementation "androidx.compose.animation:animation:1.2.0-alpha07"
    implementation "androidx.compose.material:material-icons-extended:1.2.0-alpha07"
    implementation "com.google.android.material:compose-theme-adapter:1.1.6"
}

// using a task as a preBuild dependency instead of a function that takes some time insures that it runs
task detectAndroidLocals {
    Set<String> langsList = new HashSet<>()

    // in /res are (almost) all languages that have a translated string is saved. this is safer and saves some time
    fileTree("src/main/res").visit { FileVisitDetails details ->
        if (details.file.path.endsWith("strings.xml")
                && details.file.canonicalFile.getText('UTF-8').contains("<string")) {
            def languageCode = details.file.parentFile.name.replace("values-", "")
            languageCode = (languageCode == "values") ? "en" : languageCode
            langsList.add(languageCode)
        }
    }
    def langsListString = "{${langsList.collect { "\"${it}\"" }.join(",")}}"
    android.defaultConfig.buildConfigField "String[]", "DETECTED_LOCALES", langsListString
}
preBuild.dependsOn detectAndroidLocals