/*
 * Copyright 2019 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs"

android {
    compileSdkVersion 29

    defaultConfig {
        applicationId "com.android.tv.classics"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }

        kotlinOptions {
            jvmTarget = "$JavaVersion.VERSION_1_8"
        }

        androidExtensions {
            experimental = true
        }

        // Dynamically created resources
        def host = 'classics.tv.android.com'
        resValue 'string', 'host_name', host
        resValue 'string', 'authority', applicationId
        resValue 'string', 'permission', "${applicationId}.MEDIA"
        resValue 'string', 'view_intent', "https://$host/program"
    }

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

    // Necessary for Robolectric (Unit tests)
    testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }

}

dependencies {

    // Kotlin lang
    def coroutines_version = "1.1.0"
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"

    // App compat and UI things
    implementation "androidx.media:media:1.1.0"
    implementation 'androidx.leanback:leanback:1.0.0'
    implementation 'androidx.palette:palette-ktx:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    // TV provider support library
    implementation 'androidx.tvprovider:tvprovider:1.0.0'

    // JSON parsing
    implementation 'com.google.code.gson:gson:2.8.6'

    // Navigation library
    def nav_version = '2.2.1'
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

    // Room library
    def room_version = "2.2.4"
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"

    // Work library
    def work_version = "2.3.2"
    implementation "androidx.work:work-runtime:$work_version"
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // ExoPlayer's leanback extension
    def exoplayer_version = '2.11.3'
    implementation "com.google.android.exoplayer:exoplayer-core:$exoplayer_version"
    implementation "com.google.android.exoplayer:exoplayer-ui:$exoplayer_version"
    implementation "com.google.android.exoplayer:extension-mediasession:$exoplayer_version"
    implementation "com.google.android.exoplayer:extension-leanback:$exoplayer_version"

    // Coil
    implementation 'io.coil-kt:coil:0.7.0'

    // Unit testing
    testImplementation 'androidx.test.ext:junit:1.1.1'
    testImplementation 'androidx.test:rules:1.2.0'
    testImplementation 'androidx.test:runner:1.2.0'
    testImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    // Instrumented testing
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test:rules:1.2.0'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
