apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlinx-serialization'
apply plugin: 'org.jmailen.kotlinter'

assert !ext.has("pkgNameSuffix")
assert !ext.has("libVersion")

assert extName.chars().max().asInt < 0x180 : "Extension name should be romanized"

Project theme = ext.has("themePkg") ? project(":lib-multisrc:$themePkg") : null
if (theme != null) evaluationDependsOn(theme.path)

android {
    compileSdk AndroidConfig.compileSdk

    namespace "eu.kanade.tachiyomi.extension"
    sourceSets {
        main {
            manifest.srcFile "AndroidManifest.xml"
            java.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }

    defaultConfig {
        minSdk AndroidConfig.minSdk
        targetSdk AndroidConfig.targetSdk
        applicationIdSuffix project.parent.name + "." + project.name
        versionCode theme == null ? extVersionCode : theme.baseVersionCode + overrideVersionCode
        versionName "1.4.$versionCode"
        base {
            archivesName = "tachiyomi-$applicationIdSuffix-v$versionName"
        }
        assert extClass.startsWith(".")
        manifestPlaceholders = [
                appName : "Tachiyomi: $extName",
                extClass: extClass,
                nsfw    : project.ext.find("isNsfw") ? 1 : 0,
        ]
        String baseUrl = project.ext.find("baseUrl") ?: ""
        if (theme != null && !baseUrl.isEmpty()) {
            def split = baseUrl.split("://")
            assert split.length == 2
            def path = split[1].split("/")
            manifestPlaceholders += [
                    SOURCEHOST  : path[0],
                    SOURCESCHEME: split[0],
            ]
        }
    }

    signingConfigs {
        release {
            storeFile rootProject.file("signingkey.jks")
            storePassword System.getenv("KEY_STORE_PASSWORD")
            keyAlias System.getenv("ALIAS")
            keyPassword System.getenv("KEY_PASSWORD")
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            vcsInfo.include false
        }
    }

    dependenciesInfo {
        includeInApk = false
    }

    buildFeatures {
        buildConfig true
    }

    packaging {
        resources.excludes.add("kotlin-tooling-metadata.json")
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
        freeCompilerArgs += "-opt-in=kotlinx.serialization.ExperimentalSerializationApi"
    }

    kotlinter {
        experimentalRules = true
        disabledRules = [
            "experimental:argument-list-wrapping", // Doesn't play well with Android Studio
            "experimental:comment-wrapping",
        ]
    }
}

dependencies {
    if (theme != null) implementation(theme) // Overrides core launcher icons
    implementation(project(":core"))
    compileOnly(libs.bundles.common)
}

tasks.register("writeManifestFile") {
    doLast {
        def manifest = android.sourceSets.getByName("main").manifest
        if (!manifest.srcFile.exists()) {
            File tempFile = layout.buildDirectory.get().file("tempAndroidManifest.xml").getAsFile()
            if (!tempFile.exists()) {
                tempFile.withWriter {
                    it.write('<?xml version="1.0" encoding="utf-8"?>\n<manifest />\n')
                }
            }
            manifest.srcFile(tempFile.path)
        }
    }
}

preBuild.dependsOn(writeManifestFile, lintKotlin)
if (System.getenv("CI") != "true") {
    lintKotlin.dependsOn(formatKotlin)
}