plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
    id 'com.google.gms.google-services'
    id 'com.google.firebase.crashlytics'
    id 'dagger.hilt.android.plugin'
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 34
    namespace 'com.pixelized.biblib'

    signingConfigs {
        pixelized {
            storeFile file(project.properties["PIXELIZED_RELEASE_STORE_FILE"])
            storePassword project.properties["PIXELIZED_RELEASE_STORE_PASSWORD"]
            keyAlias project.properties["PIXELIZED_RELEASE_KEY_ALIAS"]
            keyPassword project.properties["PIXELIZED_RELEASE_KEY_PASSWORD"]
        }
    }

    defaultConfig {
        applicationId "com.pixelized.biblib"
        minSdk 26
        targetSdk 34
        versionCode generateVersionCode()
        versionName "0.1.6"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary true
        }

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

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            signingConfig signingConfigs.pixelized
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        release {
            signingConfig signingConfigs.pixelized
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
    }

    buildFeatures {
        compose true
        buildConfig = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.11"
    }

    packagingOptions {
        resources {
            pickFirsts += "**/kotlinx_coroutines_core.version"
            excludes += '/META-INF/{AL2.0,LGPL2.1}'
        }
    }

    lint {
        disable 'MissingTranslation'
    }
}

dependencies {
    // Android core
    implementation 'androidx.core:core-ktx:1.13.1'
    implementation 'androidx.appcompat:appcompat:1.7.0'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.8.2'
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.2"

    // Android Compose
    implementation "androidx.compose.ui:ui:1.6.8"
    implementation "androidx.compose.ui:ui-util:1.6.8"
    implementation "androidx.compose.foundation:foundation:1.6.8"
    implementation "androidx.compose.material:material:1.6.8"
    implementation "androidx.compose.runtime:runtime-livedata:1.6.8"
    implementation "androidx.compose.ui:ui-tooling-preview:1.6.8"
    debugImplementation "androidx.compose.ui:ui-tooling:1.6.8"

    // Android Compose extension
    implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1"
    implementation 'androidx.activity:activity-compose:1.9.0'
    implementation "androidx.paging:paging-compose:3.3.0"

    // Material design
    implementation 'com.google.android.material:material:1.12.0'
    implementation "androidx.compose.material:material-icons-core:1.6.8"
    implementation "androidx.compose.material:material-icons-extended:1.6.8"

    // Injection
    implementation 'androidx.hilt:hilt-navigation-compose:1.2.0'
    implementation "com.google.dagger:hilt-android:2.51.1"
    kapt "com.google.dagger:hilt-compiler:2.51.1"

    // Accompanist
    implementation "com.google.accompanist:accompanist-navigation-material:0.34.0"
    implementation "com.google.accompanist:accompanist-systemuicontroller:0.34.0"
    implementation "com.google.accompanist:accompanist-pager-indicators:0.34.0"
    implementation "com.google.accompanist:accompanist-drawablepainter:0.34.0"
    implementation "com.google.accompanist:accompanist-placeholder-material:0.34.0"
    implementation "com.google.accompanist:accompanist-swiperefresh:0.34.0"

    // Landscapist
    implementation("io.coil-kt:coil-compose:2.6.0")

    // Reorder element in lazylist
    implementation "org.burnoutcrew.composereorderable:reorderable:0.9.6"

    // Navigation
    implementation "androidx.navigation:navigation-compose:2.7.7"

    // Splash Screen support prior to Android 12
    implementation "androidx.core:core-splashscreen:1.0.1"

    // Google sign in.
    implementation "com.google.android.gms:play-services-auth:21.2.0"

    // Firebase
    implementation platform('com.google.firebase:firebase-bom:33.1.1')
    implementation 'com.google.firebase:firebase-crashlytics'

    // RetroFit & Gson for webservice call
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    implementation 'com.google.code.gson:gson:2.10.1'

    // Logging Network Calls
    implementation "com.squareup.okhttp3:logging-interceptor:4.11.0"

    // Room
    implementation "androidx.room:room-runtime:2.6.1"
    implementation "androidx.room:room-ktx:2.6.1"
    kapt "androidx.room:room-compiler:2.6.1"
}

static def generateVersionCode() {
    def result = "git rev-list HEAD --count".execute().text.trim() //unix
    if (result.empty) result = "PowerShell -Command git rev-list HEAD --count".execute().text.trim()
    //windows
    if (result.empty) throw new RuntimeException("Could not generate versioncode on this platform? Cmd output: ${result.text}")
    return result.toInteger()
}