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 "com.google.devtools.ksp"
    id "org.jetbrains.kotlin.android"
}

android {
    compileSdk 35
    // 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 "26.3.11579264"
    namespace "org.oxycblt.auxio"

    defaultConfig {
        applicationId namespace
        versionName "3.6.3"
        versionCode 53

        minSdk 24
        targetSdk 35

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = "17"
        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
            }
        }
    }

    packagingOptions {
        jniLibs {
            excludes += ['**/kotlin/**', '**/okhttp3/**']
        }
        resources {
            excludes += ['DebugProbesKt.bin', 'kotlin-tooling-metadata.json', '**/kotlin/**', '**/okhttp3/**', 'META-INF/*.version']
        }
    }

    buildFeatures {
        viewBinding true
        buildConfig 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"

    def coroutines_version = '1.7.2'
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:$coroutines_version"

    // --- SUPPORT ---

    // General
    implementation "androidx.core:core-ktx:1.15.0"
    implementation "androidx.appcompat:appcompat:1.7.0"
    implementation "androidx.activity:activity-ktx:1.9.3"
    // noinspection GradleDependency
    implementation "androidx.fragment:fragment-ktx:1.6.2"

    // Components
    // Deliberately kept on 1.2.1 to prevent a bug where the queue sheet will not collapse on
    // certain upwards scrolling events
    // TODO: Report this issue and hope for a timely fix
    // noinspection GradleDependency
    implementation "androidx.recyclerview:recyclerview:1.2.1"
    implementation "androidx.constraintlayout:constraintlayout:2.2.0"
    // 1.1.0 upgrades recyclerview to 1.3.0, keep it on 1.0.0
    //noinspection GradleDependency
    implementation "androidx.viewpager2:viewpager2:1.0.0"

    // Lifecycle
    def lifecycle_version = "2.8.7"
    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.7.0"

    // Android Auto
    implementation "androidx.car.app:app:1.4.0"

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

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

    // --- THIRD PARTY ---

    // Exoplayer (Vendored)
    implementation project(":media-lib-exoplayer")
    implementation project(":media-lib-decoder-ffmpeg")
    coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:2.1.3"

    // Image loading
    implementation 'io.coil-kt.coil3:coil-core:3.0.2'

    // Material
    // 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.13.0-alpha07"

    // Dependency Injection
    implementation "com.google.dagger:dagger:$hilt_version"
    kapt "com.google.dagger:dagger-compiler:$hilt_version"
    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-android-compiler:$hilt_version"

    // Logging
    implementation 'com.jakewharton.timber:timber:5.0.1'

    // Speed dial
    implementation "com.leinardi.android:speed-dial:3.3.0"

    // Tasker integration
    implementation 'com.joaomgcd:taskerpluginlibrary:0.4.10'

    // Fuzzy search
    implementation 'org.apache.commons:commons-text:1.9'

    // Testing
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'
    testImplementation "junit:junit:4.13.2"
    testImplementation "io.mockk:mockk:1.13.7"
    testImplementation "org.robolectric:robolectric:4.11"
    testImplementation 'androidx.test:core-ktx:1.6.1'
    androidTestImplementation 'androidx.test.ext:junit:1.2.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
}

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

afterEvaluate {
    preDebugBuild.dependsOn spotlessApply
}
