import java.time.Instant

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
}

android {
    compileSdk 33

    defaultConfig {
        applicationId 'com.github.libretube'
        minSdk 21
        targetSdk 33
        versionCode 25
        versionName '0.9.1'
        multiDexEnabled true
        testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
        resValue "string", "app_name", "LibreTube"

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

    buildFeatures {
        viewBinding true
    }

    applicationVariants.all { variant ->
        // use the date as version for debug builds
        if (variant.name == 'debug') {
            variant.outputs.each { output ->
                output.versionCodeOverride = getUnixTime()
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            debuggable true
            applicationIdSuffix ".debug"
            resValue "string", "app_name", "LibreTube Debug"
        }
    }
    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    splits {
        abi {
            enable true
            reset()
            include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
            universalApk true

        }
    }
    packagingOptions {
        jniLibs {
            excludes += ['lib/armeabi-v7a/*_neon.so']
        }
    }
    namespace 'com.github.libretube'
}

dependencies {
    //debugImplementation libs.square.leakcanary

    /* Android Core */
    implementation libs.androidx.appcompat
    implementation libs.androidx.constraintlayout
    implementation libs.androidx.legacySupport
    implementation libs.androidx.multidex
    implementation libs.androidx.navigation.fragment
    implementation libs.androidx.navigation.ui
    implementation libs.androidx.preference
    implementation libs.androidx.work.runtime

    /* Android Lifecycle */
    implementation libs.lifecycle.viewmodel
    implementation libs.lifecycle.runtime
    implementation libs.lifecycle.livedata

    /* Testing */
    androidTestImplementation libs.androidx.test.junit
    androidTestImplementation libs.androidx.test.espressoCore

    /* Design */
    implementation libs.material

    /* ExoPlayer */
    implementation libs.exoplayer
    implementation(libs.exoplayer.extension.cronet) { exclude group: 'com.google.android.gms' }
    implementation libs.exoplayer.extension.mediasession
    implementation libs.exoplayer.dash

    /* Retrofit and Jackson */
    implementation libs.square.retrofit
    implementation libs.square.retrofit.converterJackson
    implementation libs.jacksonAnnotations

    /* Cronet and Coil */
    coreLibraryDesugaring libs.desugaring
    implementation libs.cronet.embedded
    implementation libs.cronet.okhttp
    implementation libs.coil

    /* Room */
    kapt libs.room.compiler
    implementation libs.room
}

static def getUnixTime() {
    return Instant.now().getEpochSecond()
}