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

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

apply plugin: "com.android.application"

configurations{ natives }

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

dependencies{
    implementation project(":core")

    implementation arcModule("backends:backend-android")
    implementation 'com.jakewharton.android.repackaged:dalvik-dx:9.0.0_r3'
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
    natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
    natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
    natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
    natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-arm64-v8a"
    natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
    natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64"
}

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

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

android{
    buildToolsVersion '29.0.2'
    compileSdkVersion 29
    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 29
        
        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{
                println("No keystore info property found!")
            }
        }
    }

    if(project.hasProperty("RELEASE_STORE_FILE")) {
        buildTypes {
            release {
                signingConfig signingConfigs.release
            }
        }
    }
}
// called every time gradle gets executed, takes the native dependencies of
// the natives configuration, and extracts them to the proper libs/ folders
// so they get packed with the APK.
task copyAndroidNatives(){
    file("libs/armeabi/").mkdirs()
    file("libs/armeabi-v7a/").mkdirs()
    file("libs/arm64-v8a/").mkdirs()
    file("libs/x86_64/").mkdirs()
    file("libs/x86/").mkdirs()

    configurations.natives.files.each{ jar ->
        def outputDir = null
        if(jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a")
        if(jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a")
        if(jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi")
        if(jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64")
        if(jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86")
        if(outputDir != null){
            copy{
                from zipTree(jar)
                into outputDir
                include "*.so"
            }
        }
    }
}

task run(type: Exec){
    def path
    def localProperties = project.file("../local.properties")
    if(localProperties.exists()){
        Properties properties = new Properties()
        localProperties.withInputStream{ instr ->
            properties.load(instr)
        }
        def sdkDir = properties.getProperty('sdk.dir')
        if(sdkDir){
            path = sdkDir
        }else{
            path = "$System.env.ANDROID_HOME"
        }
    }else{
        path = "$System.env.ANDROID_HOME"
    }

    def adb = path + "/platform-tools/adb"
    commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/mindustry.android.AndroidLauncher'
}