import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform

apply plugin: 'com.android.library'

repositories {
    mavenCentral()
    google()
}

configurations {
    compile.exclude module: 'support-v4'
}

configurations.all {
    exclude group: 'com.google.firebase', module: 'firebase-core'
    exclude group: 'androidx.recyclerview', module: 'recyclerview'
}

dependencies {
    implementation 'androidx.fragment:fragment:1.2.0'
    implementation 'androidx.core:core:1.10.1'
    implementation 'androidx.palette:palette:1.0.0'
    implementation 'androidx.exifinterface:exifinterface:1.3.6'
    implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
    implementation 'androidx.multidex:multidex:2.0.1'
    implementation "androidx.sharetarget:sharetarget:1.2.0"
    implementation 'androidx.interpolator:interpolator:1.0.0'
    implementation 'androidx.biometric:biometric:1.1.0'

    compileOnly 'org.checkerframework:checker-qual:2.5.2'
    compileOnly 'org.checkerframework:checker-compat-qual:2.5.0'
    implementation 'com.google.firebase:firebase-messaging:22.0.0'
    implementation 'com.google.firebase:firebase-config:21.0.1'
    implementation 'com.google.firebase:firebase-datatransport:18.1.0'
    implementation 'com.google.firebase:firebase-appindexing:20.0.0'
    implementation 'com.google.android.gms:play-services-maps:18.1.0'
    implementation 'com.google.android.gms:play-services-auth:20.4.0'
    implementation 'com.google.android.gms:play-services-vision:20.1.3'
    implementation 'com.google.android.gms:play-services-wearable:18.0.0'
    implementation 'com.google.android.gms:play-services-location:21.0.1'
    implementation 'com.google.android.gms:play-services-wallet:19.1.0'
    implementation 'com.googlecode.mp4parser:isoparser:1.0.6'
    implementation 'com.stripe:stripe-android:2.0.2'
    implementation 'com.google.mlkit:language-id:16.1.1'
    implementation 'com.android.billingclient:billing:6.0.1'
    implementation 'com.google.code.gson:gson:2.10'
    implementation 'com.google.guava:guava:31.1-android'
    implementation 'com.google.android.play:integrity:1.3.0'
    implementation 'com.google.android.gms:play-services-safetynet:18.0.1'

    implementation 'com.google.android.gms:play-services-mlkit-subject-segmentation:16.0.0-beta1'
    implementation 'com.google.android.gms:play-services-mlkit-image-labeling:16.0.8'
    constraints {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.0") {
            because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
        }
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0") {
            because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
        }
    }

    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
}

def isWindows = String.valueOf(DefaultNativePlatform.currentOperatingSystem.toFamilyName() == OperatingSystemFamily.WINDOWS)
android {
    compileSdkVersion 33
    buildToolsVersion '33.0.0'
    ndkVersion "21.4.7075529"

    sourceSets.main.jniLibs.srcDirs = ['./jni/']

    externalNativeBuild {
        cmake {
            path 'jni/CMakeLists.txt'
        }
    }

    lintOptions {
        disable 'MissingTranslation'
        disable 'ExtraTranslation'
        disable 'BlockedPrivateApi'
    }

    dexOptions {
        jumboMode = true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8

        coreLibraryDesugaringEnabled true
    }

    defaultConfig.versionCode = Integer.parseInt(APP_VERSION_CODE)

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 33
        versionName "8.9.0"

        vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi']

        multiDexEnabled true

        externalNativeBuild {
            cmake {
                version '3.10.2'
                arguments '-DANDROID_STL=c++_static', '-DANDROID_PLATFORM=android-16', "-j=16"
            }
        }
    }

    buildTypes {
        debug {
            debuggable true
            jniDebuggable true
            minifyEnabled false
            shrinkResources false
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro'
            ndk.debugSymbolLevel = 'FULL'
            buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\""
            buildConfigField "String", "APP_CENTER_HASH", "\"\""
            buildConfigField "boolean", "DEBUG_VERSION", "true"
            buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "true"
            buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows
        }

        HA_private {
            debuggable false
            jniDebuggable false
            minifyEnabled true
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro'
            ndk.debugSymbolLevel = 'FULL'
            buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\""
            buildConfigField "String", "APP_CENTER_HASH", "\"" + getProps("APP_CENTER_HASH_PRIVATE") + "\""
            buildConfigField "boolean", "DEBUG_VERSION", "true"
            buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "true"
            buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows
        }

        HA_public {
            debuggable false
            jniDebuggable false
            minifyEnabled true
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro'
            ndk.debugSymbolLevel = 'FULL'
            buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\""
            buildConfigField "String", "APP_CENTER_HASH", "\"" + getProps("APP_CENTER_HASH_PUBLIC") + "\""
            buildConfigField "boolean", "DEBUG_VERSION", "true"
            buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "false"
            buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows
        }

        HA_hardcore {
            debuggable false
            jniDebuggable false
            minifyEnabled true
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro'
            ndk.debugSymbolLevel = 'FULL'
            buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\""
            buildConfigField "String", "APP_CENTER_HASH", "\"" + getProps("APP_CENTER_HASH_HARDCORE") + "\""
            buildConfigField "boolean", "DEBUG_VERSION", "true"
            buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "true"
            buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows
        }

        standalone {
            debuggable false
            jniDebuggable false
            minifyEnabled true
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro'
            ndk.debugSymbolLevel = 'FULL'
            buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\""
            buildConfigField "String", "APP_CENTER_HASH", "\"\""
            buildConfigField "boolean", "DEBUG_VERSION", "false"
            buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "false"
            buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows
        }

        release {
            debuggable false
            jniDebuggable false
            minifyEnabled true
            shrinkResources false
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../TMessagesProj/proguard-rules.pro'
            ndk.debugSymbolLevel = 'FULL'
            buildConfigField "String", "BUILD_VERSION_STRING", "\"" + APP_VERSION_NAME + "\""
            buildConfigField "String", "APP_CENTER_HASH", "\"\""
            buildConfigField "boolean", "DEBUG_VERSION", "false"
            buildConfigField "boolean", "DEBUG_PRIVATE_VERSION", "false"
            buildConfigField "boolean", "BUILD_HOST_IS_WINDOWS", isWindows
        }
    }
}


def getProps(String propName) {
    def propsFile = rootProject.file('local.properties')
    if (propsFile.exists()) {
        def props = new Properties()
        props.load(new FileInputStream(propsFile))
        return props[propName]
    } else {
        return "";
    }
}
apply plugin: 'com.google.gms.google-services'

task checkVisibility {
    doFirst {
        def isPrivateBuild = project.gradle.startParameter.taskNames.find {
            it.contains("HA_private") || it.contains("Debug") || it.contains("Release")
        }
        def isPublicAllowed = !project.hasProperty("IS_PRIVATE") || !project.property("IS_PRIVATE").toBoolean()
        if (!isPrivateBuild && !isPublicAllowed) {
            throw new GradleException("Building public version of private code!")
        }
    }
    doLast {
        if (project.gradle.startParameter.taskNames.find { it.contains("HA_public") }) {
            def privateBuild = file("${projectDir}_AppHockeyApp/afat/HA_private/app.apk")
            if (privateBuild.exists()) {
                privateBuild.delete()
            }
        }
    }
}

preBuild.dependsOn checkVisibility