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

applyCommonAndroidParameters(project)
applyCrashlyticsIfRelease(project)

android {
    ndkVersion "25.0.8141415"
    defaultConfig {
        applicationId "app.dapk.st"
        def versionJson = new groovy.json.JsonSlurper().parseText(rootProject.file('version.json').text)
        versionCode versionJson.code
        versionName versionJson.name

        if (isDebugBuild) {
            resConfigs "en", "xxhdpi"
        } else {
            resConfigs "en"
        }

        if (isFoss()) {
            archivesBaseName = "$archivesBaseName-foss"
        }
    }

    bundle {
        abi.enableSplit true
        density.enableSplit true
        language.enableSplit true
    }

    buildTypes {
        debug {
            versionNameSuffix = " [debug]"
            matchingFallbacks = ['release']
            signingConfig.storeFile rootProject.file("tools/debug.keystore")
        }
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
                    'proguard/app.pro',
                    "proguard/serializationx.pro",
                    "proguard/olm.pro"

            if (project.hasProperty("unsigned")) {
                // releases are signed externally
            } else {
                signingConfig = buildTypes.debug.signingConfig
            }
        }
    }

    compileOptions {
        coreLibraryDesugaringEnabled true
    }

    packagingOptions {
        resources.excludes += "DebugProbesKt.bin"
    }
}

if (isDebugBuild) {
    androidComponents {
        def release = selector().withBuildType("release")
        beforeVariants(release) { it.enabled = false }
    }
}

dependencies {
    coreLibraryDesugaring Dependencies.google.jdkLibs

    implementation project(":features:home")
    implementation project(":features:directory")
    implementation project(":features:login")
    implementation project(":features:settings")
    implementation project(":features:notifications")
    implementation project(":features:messenger")
    implementation project(":features:profile")
    implementation project(":features:navigator")
    implementation project(":features:share-entry")

    implementation project(':domains:store')
    implementation project(":domains:android:compose-core")
    implementation project(":domains:android:core")
    implementation project(":domains:android:tracking")
    implementation project(":domains:android:push")
    implementation project(":domains:android:work")
    implementation project(":domains:android:imageloader")
    implementation project(":domains:olm")

    firebase(it, "messaging")

    implementation project(":matrix:matrix")
    implementation project(":matrix:matrix-http-ktor")
    implementation project(":matrix:services:auth")
    implementation project(":matrix:services:sync")
    implementation project(":matrix:services:room")
    implementation project(":matrix:services:push")
    implementation project(":matrix:services:message")
    implementation project(":matrix:services:device")
    implementation project(":matrix:services:crypto")
    implementation project(":matrix:services:profile")

    implementation project(":core")

    implementation project(":chat-engine")
    implementation project(":matrix-chat-engine")

    implementation Dependencies.google.androidxComposeUi
    implementation Dependencies.mavenCentral.ktorAndroid
    implementation Dependencies.mavenCentral.sqldelightAndroid
    implementation Dependencies.mavenCentral.matrixOlm

    implementation Dependencies.mavenCentral.kotlinSerializationJson
    debugImplementation Dependencies.mavenCentral.leakCanary
}