apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs.kotlin"
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

android {
    compileSdk 30

    defaultConfig {
        applicationId "cy.agorise.bitsybitshareswallet"
        minSdk 21
        targetSdk 30
        versionCode 15
        versionName "0.17.2-beta"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

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

    buildFeatures {
        viewBinding true
    }

    buildTypes {
        debug {
            minifyEnabled false
            resValue("string", "PORT_NUMBER", "8082")
        }
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    android.packagingOptions {
        exclude 'lib/x86_64/darwin/libscrypt.dylib'
        exclude 'lib/x86_64/freebsd/libscrypt.so'
        exclude 'lib/x86_64/linux/libscrypt.so'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

dependencies {
    def arch_version = "2.1.0"
    def lifecycle_version = "2.3.1"
    def preference_version = "1.1.1"
    def room_version = "2.2.6"
    def rx_bindings_version = '3.0.0'
    def version_coroutine = '1.4.1'

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':graphenejlib:graphenej')
    implementation project(':PDFJet')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    // AndroidX
    implementation 'androidx.activity:activity-ktx:1.2.4'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation "androidx.fragment:fragment-ktx:1.3.2"
    implementation "androidx.preference:preference-ktx:$preference_version"
    // Google
    implementation 'com.google.zxing:core:3.4.0'
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
    implementation 'com.google.maps.android:android-maps-utils:0.5'
    // AAC Lifecycle
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
    // AAC Room
    implementation "androidx.room:room-runtime:$room_version"
    implementation "androidx.room:room-rxjava2:$room_version" // RxJava support for Room
    implementation "androidx.room:room-ktx:$room_version" // Coroutines support for Room
    kapt "androidx.room:room-compiler:$room_version"
    // AAC Navigation
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
    // Kotlin Coroutines
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$version_coroutine"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$version_coroutine"
    // RxBindings
    implementation "com.jakewharton.rxbinding3:rxbinding:$rx_bindings_version"
    implementation "com.jakewharton.rxbinding3:rxbinding-material:$rx_bindings_version" // Material Components widgets
    implementation "com.jakewharton.rxbinding3:rxbinding-appcompat:$rx_bindings_version" // AndroidX appcompat widgets
    // Retrofit & OkHttp
    implementation 'com.squareup.okhttp3:okhttp:4.2.0'
    implementation 'com.squareup.retrofit2:retrofit:2.6.1'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.1'
    implementation 'com.squareup.okhttp3:logging-interceptor:4.2.0'
    implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
    //Firebase
    implementation platform('com.google.firebase:firebase-bom:26.7.0') // Import the BoM for the Firebase platform
    implementation 'com.google.firebase:firebase-crashlytics-ktx'
    implementation 'com.google.firebase:firebase-analytics-ktx'

    // CSV generation
    implementation 'com.opencsv:opencsv:3.7'
    // Others
    api 'com.google.guava:guava:27.0.1-android'
    implementation 'org.bitcoinj:bitcoinj-core:0.14.3'
    implementation 'com.moldedbits.r2d2:r2d2:1.0.1'
    implementation 'me.dm7.barcodescanner:zxing:1.9.13'
    implementation 'com.afollestad.material-dialogs:core:3.1.1'
    implementation 'com.andrognito.patternlockview:patternlockview:1.0.0'
    // Android Debug Database
    debugImplementation 'com.amitshekhar.android:debug-db:1.0.6'

    // Testing libs
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:core:1.3.0'

    androidTestImplementation "androidx.arch.core:core-testing:$arch_version"
    androidTestImplementation "androidx.room:room-testing:$room_version"
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

// Added to avoid the compilation problem due to a duplicate ListenableFuture library
afterEvaluate {
    configurations.all {
        def group = 'com.google.guava', name = 'guava', version = '27.0.1-android'
        resolutionStrategy.eachDependency { details ->
            if (requested.group == group && requested.name == name) {
                details.useTarget group: details.requested.group, name: name, version: version
            }
        }
    }
}
