buildscript{
    repositories{
        mavenLocal()
        mavenCentral()
        google()
        maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
    }

    dependencies{
        classpath 'com.android.tools.build:gradle:7.2.1'
    }
}

apply plugin: "com.android.application"

configurations{ natives }

repositories{
    mavenCentral()
    maven{ url "https://maven.google.com" }
}

task deploy(type: Copy){
    dependsOn "assembleRelease"

    from "build/outputs/apk/standard/release/android-standard-release.apk"
    into "../deploy/"
    rename("android-standard-release.apk", "${generateDeployName('android')}.apk")
}

android{
    buildToolsVersion '31.0.0'
    compileSdkVersion 31
    sourceSets{
        main{
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets', 'src/main/assets', '../core/assets/']
            jniLibs.srcDirs = ['libs']
        }

        androidTest.setRoot('tests')
    }

    packagingOptions{
        exclude 'META-INF/robovm/ios/robovm.xml'
    }

    defaultConfig{
        Properties props = loadVersionProps()
        Integer vcode = props['androidBuildCode']?.toInteger() ?: 1
        def versionNameResult = "$versionNumber-$versionType-${getBuildVersion().replace(" ", "-")}"

        applicationId "io.anuke.mindustry"
        minSdkVersion 14
        targetSdkVersion 31
        
        versionName versionNameResult
        versionCode = vcode

        if(project.hasProperty("release")){
            props['androidBuildCode'] = (vcode + 1).toString()
        }
        props.store(file('../core/assets/version.properties').newWriter(), null)
    }

    compileOptions{
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    flavorDimensions "google"

    signingConfigs{
        release{
            if(project.hasProperty("RELEASE_STORE_FILE")){
                storeFile file(RELEASE_STORE_FILE)
                storePassword RELEASE_STORE_PASSWORD
                keyAlias RELEASE_KEY_ALIAS
                keyPassword RELEASE_KEY_PASSWORD
            }else if(System.getenv("CI") == "true"){
                storeFile = file("../../bekeystore.jks")
                storePassword = System.getenv("keystore_password")
                keyAlias = System.getenv("keystore_alias")
                keyPassword = System.getenv("keystore_alias_password")
            }else{
                println("No keystore property found. Releases will be unsigned.")
            }
        }
    }

    buildTypes{
        all{
            //TODO without these lines (r8 enabled), Mindustry crashes with missing default interface method errors.
            //WHY THE HELL ARE DEFAULT INTERFACES NOT BEING DESUGARED? WHY DID UPDATING AGP MAKE THIS HAPPEN?
            //When I ENABLE shrinking, r8 goes and REMOVES ALL DEFAULT INTERFACE CLASSES, which breaks mods. Why?
            //-keep class mindustry.** { *; } should *keep the classes* - WHY IS R8 REMOVING THEM?
            minifyEnabled = true
            shrinkResources = true
            proguardFiles("proguard-rules.pro")
        }
    }

    if(project.hasProperty("RELEASE_STORE_FILE") || System.getenv("CI") == "true"){
        buildTypes{
            release{
                signingConfig signingConfigs.release
            }
        }
    }
}

dependencies{
    implementation project(":core")

    implementation arcModule("backends:backend-android")
    implementation 'com.jakewharton.android.repackaged:dalvik-dx:9.0.0_r3'

    natives "com.github.Anuken.Arc:natives-android:${getArcHash()}"
    natives "com.github.Anuken.Arc:natives-freetype-android:${getArcHash()}"

    //TODO dynamically find best android platform jar instead of hard-coding to 30
    def sdkFile = new File((String)findSdkDir(), "/platforms/android-30/android.jar")
    if(sdkFile.exists()) compileOnly files(sdkFile.absolutePath)
}

task copyAndroidNatives(){
    configurations.natives.files.each{ jar ->
        copy{
            from zipTree(jar)
            into file("libs/")
            include "**"
        }
    }
}

task run(type: Exec){
    commandLine "${findSdkDir()}/platform-tools/adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/mindustry.android.AndroidLauncher'
}

if(!project.ext.hasSprites()){
    tasks.whenTaskAdded{ task ->
        if(task.name == 'assembleDebug' || task.name == 'assembleRelease'){
            task.dependsOn ":tools:pack"
        }
    }
}