plugins {
    id "com.android.application"
    id "kotlin-android"
    id "androidx.navigation.safeargs.kotlin"
    id "com.diffplug.spotless"
    id "kotlin-parcelize"
    id "dagger.hilt.android.plugin"
    id "kotlin-kapt"
    id 'org.jetbrains.kotlin.android'
}

android {
    compileSdk 33
    // NDK is not used in Auxio explicitly (used in the ffmpeg extension), but we need to specify
    // it here so that binary stripping will work.
    // TODO: Eventually you might just want to start vendoring the FFMpeg extension so the
    //  NDK use is unified
    ndkVersion = "23.2.8568313"
    namespace "org.oxycblt.auxio"

    defaultConfig {
        applicationId namespace
        versionName "3.0.3"
        versionCode 27

        minSdk 21
        targetSdk 33

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget = "11"
        freeCompilerArgs += "-Xjvm-default=all"
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix "-DEBUG"
        }

        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"

            dependenciesInfo {
                includeInApk = false
                includeInBundle = false
            }
        }
    }

    buildFeatures {
        viewBinding true
    }
}

dependencies {
    // Kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'

    // --- SUPPORT ---

    // General
    // 1.4.0 is used in order to avoid a ripple bug in material components
    implementation "androidx.appcompat:appcompat:1.6.1"
    implementation "androidx.core:core-ktx:1.9.0"
    implementation "androidx.activity:activity-ktx:1.6.1"
    implementation "androidx.fragment:fragment-ktx:1.5.5"

    // UI
    implementation "androidx.recyclerview:recyclerview:1.2.1"
    implementation "androidx.constraintlayout:constraintlayout:2.1.4"
    implementation "androidx.viewpager2:viewpager2:1.1.0-beta01"
    implementation 'androidx.core:core-ktx:1.9.0'

    // Lifecycle
    def lifecycle_version = "2.5.1"
    implementation "androidx.lifecycle:lifecycle-common:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"

    // Navigation
    implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
    implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"

    // Media
    implementation "androidx.media:media:1.6.0"

    // Preferences
    implementation "androidx.preference:preference-ktx:1.2.0"

    // Database
    def room_version = '2.5.0'
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"
    implementation "androidx.room:room-ktx:$room_version"

    // --- THIRD PARTY ---

    // Exoplayer (Vendored)
    implementation project(":exoplayer-library-core")
    implementation project(":exoplayer-extension-ffmpeg")

    // Image loading
    implementation 'io.coil-kt:coil-base:2.2.2'

    // Material
    // TODO: Stuck on 1.8.0-alpha01 until ripple bug with tab layout can be worked around
    // TODO: Exactly figure out the conditions that the 1.7.0 ripple bug occurred so you can just
    //  PR a fix.
    implementation "com.google.android.material:material:1.8.0-alpha01"

    // Dependency Injection
    def dagger_version = '2.45'
    implementation "com.google.dagger:dagger:$dagger_version"
    kapt "com.google.dagger:dagger-compiler:$dagger_version"
    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
    // Testing
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
    testImplementation "junit:junit:4.13.2"
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

spotless {
    kotlin {
        target "src/**/*.kt"
        ktfmt().dropboxStyle()
        licenseHeaderFile("NOTICE")
    }
}

afterEvaluate {
    preDebugBuild.dependsOn spotlessApply
}
