/*
 * Unitto is a unit converter for Android
 * Copyright (c) 2023 Elshan Agaev
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

plugins {
    // Basic stuff
    id("com.android.application")
    id("kotlin-android")

    id("unitto.android.application.jacoco")
    id("jacoco")
    id("unitto.android.hilt")
    alias(libs.plugins.baselineprofile)
}

android {
    namespace = "com.sadellie.unitto"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.sadellie.unitto"
        minSdk = 21
        targetSdk = 34
        versionCode = libs.versions.versionCode.get().toInt()
        versionName = libs.versions.versionName.get()
        resourceConfigurations += setOf(
            "en",
            "en-rGB",
            "de",
            "es",
            "fr",
            "hu",
            "in",
            "it",
            "nl",
            "pt-rBR",
            "ru",
            "tr",
        )
    }

    buildTypes {
        debug {
            isDebuggable = true
            isMinifyEnabled = false
            isShrinkResources = false
            applicationIdSuffix = ".debug"
            enableUnitTestCoverage = true
        }
        release {
            initWith(getByName("debug"))
            isDebuggable = false
            isMinifyEnabled = true
            isShrinkResources = true
            applicationIdSuffix = ""
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        create("benchmark") {
            initWith(buildTypes.getByName("release"))
            matchingFallbacks.add("release")
            signingConfig = signingConfigs.getByName("debug")
            // Only use benchmark proguard rules
            proguardFiles("benchmark-rules.pro")
            isMinifyEnabled = true
        }
    }

    flavorDimensions += "mainFlavorDimension"
    productFlavors {
        create("playStore") {}
        create("fdroid") {}
    }

    buildFeatures {
        compose = true
        aidl = false
        renderScript = false
        shaders = false
        buildConfig = false
        resValues = false
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
        isCoreLibraryDesugaringEnabled = true
    }

    packaging {
        resources {
            excludes.add("/META-INF/{AL2.0,LGPL2.1}")
        }
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_11.toString()
    }

    composeOptions {
        kotlinCompilerExtensionVersion = libs.versions.androidxComposeCompiler.get()
    }
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_11.toString()
    }
}

dependencies {
    implementation(libs.androidx.core.core.ktx)
    implementation(libs.androidx.profileinstaller.profileinstaller)
    coreLibraryDesugaring(libs.com.android.tools.desugar.jdk.libs)

    implementation(libs.androidx.compose.material3)
    implementation(libs.androidx.compose.material3.window.size)
    implementation(libs.androidx.compose.material.icons.extended)
    implementation(libs.androidx.lifecycle.lifecycle.runtime.compose)
    implementation(libs.com.github.sadellie.themmo)
    implementation(libs.com.google.accompanist.accompanist.systemuicontroller)
    implementation(libs.androidx.datastore.datastore.preferences)
    implementation(libs.androidx.appcompat.appcompat)

    implementation(project(":feature:converter"))
    implementation(project(":feature:calculator"))
    implementation(project(":feature:settings"))
    implementation(project(":feature:datecalculator"))
    implementation(project(":feature:timezone"))
    implementation(project(":feature:bodymass"))
    implementation(project(":feature:glance"))
    implementation(project(":data:model"))
    implementation(project(":data:userprefs"))
    implementation(project(":core:ui"))
    implementation(project(":core:base"))

    baselineProfile(project(":benchmark"))
}

baselineProfile {
    // Don't build on every iteration of a full assemble.
    // Instead enable generation directly for the release build variant.
    automaticGenerationDuringBuild = false
}
