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

ext.readProperty = { paramName -> readPropertyWithDefault(paramName, null) }
ext.readPropertyWithDefault = { paramName, defaultValue ->
    if (project.hasProperty(paramName)) {
        return project.getProperties().get(paramName)
    } else {
        Properties properties = new Properties()
        if (project.rootProject.file('local.properties').exists()) {
            properties.load(project.rootProject.file('local.properties').newDataInputStream())
        }
        if (properties.getProperty(paramName) != null) {
            return properties.getProperty(paramName)
        } else {
            return defaultValue
        }
    }
}

// Try reading secrets from file
def secretsPropertiesFile = rootProject.file("secrets.properties")
def secretProperties = new Properties()

if (secretsPropertiesFile.exists()) {
    secretProperties.load(new FileInputStream(secretsPropertiesFile))
}
// Otherwise read from environment variables, this happens in CI
else {
    secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}")
    secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}")
    secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}")
}

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "net.schueller.peertube"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1057
        versionName "1.1.1"
        buildConfigField "long", "BUILD_TIME", readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + 'L'
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                        "room.schemaLocation"  : "$projectDir/schemas".toString(),
                        "room.incremental"     : "true",
                        "room.expandProjection": "true"]
            }
        }
    }
    signingConfigs {
        release {
            // You need to specify either an absolute path or include the
            // keystore file in the same directory as the build.gradle file.
            storeFile file("../android-signing-keystore.jks")
            storePassword "${secretProperties['signing_keystore_password']}"
            keyAlias "${secretProperties['signing_key_alias']}"
            keyPassword "${secretProperties['signing_key_password']}"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            testCoverageEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    applicationVariants.all { variant ->
        variant.resValue "string", "versionName", variant.versionName
    }

    buildFeatures{
        viewBinding = true
    }

}

def room_version = "2.2.6"
def lifecycleVersion = '2.2.0'
def exoplayer = '2.12.3'
def fragment_version = "1.2.5"

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    // Layouts and design
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
    implementation "androidx.fragment:fragment-ktx:$fragment_version"

    implementation 'de.hdodenhof:circleimageview:3.1.0'

    // font awesome
    implementation 'com.mikepenz:iconics-core:5.2.4'
    implementation 'com.mikepenz:fontawesome-typeface:5.9.0.2-kotlin@aar'

    // http client / REST
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'

    // image downloading and caching library
    implementation 'com.squareup.picasso:picasso:2.71828'

    // json decoder/encoder
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

    // Torrents and WebRTC
    implementation 'com.github.TorrentStream:TorrentStream-Android:2.7.0'
//            implementation "com.github.TorrentStream:TorrentStreamServer-Android:1.0.1"
//            implementation 'org.webrtc:google-webrtc:1.0.+'

    // video player  repo:jcenter()
    implementation "com.google.android.exoplayer:exoplayer-core:$exoplayer"
    implementation "com.google.android.exoplayer:exoplayer-dash:$exoplayer"
    implementation "com.google.android.exoplayer:exoplayer-ui:$exoplayer"
    implementation "com.google.android.exoplayer:exoplayer-hls:$exoplayer"
    implementation "com.google.android.exoplayer:exoplayer-smoothstreaming:$exoplayer"
    implementation "com.google.android.exoplayer:extension-mediasession:$exoplayer"
    implementation "com.google.android.exoplayer:extension-okhttp:$exoplayer"

    // date formatter
    implementation 'org.ocpsoft.prettytime:prettytime:5.0.0.Final'

    // Version comparison
    implementation 'org.apache.maven:maven-artifact:3.6.3'

    // database lib
    implementation "androidx.room:room-runtime:$room_version"
    implementation "androidx.room:room-ktx:$room_version"
    kapt "androidx.room:room-compiler:$room_version"

    // Lifecycle components
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion"
    kapt "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion"


    implementation 'androidx.preference:preference-ktx:1.1.1'

    // testing
    testImplementation 'junit:junit:4.13.1'
    androidTestImplementation 'androidx.test:runner:1.3.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    androidTestImplementation "androidx.room:room-testing:$room_version"
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
