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 project(":net")

    implementation arcModule("backends:backend-android")
    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", appName + "-android-" + getVersionString() + ".apk")
}

android{
    buildToolsVersion '28.0.3'
    compileSdkVersion 28
    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{
        def vfile = file('../core/assets/version.properties')

        def code = 0
        def versionNameResult = "unknown"

        if(vfile.exists()){
            def props = new Properties()
            props.load(new FileInputStream(vfile))

            code = (props['androidBuildCode'] == null ? 0 : props['androidBuildCode']).toInteger() + 1

            props['androidBuildCode'] = code.toString()
            props.store(vfile.newWriter(), "Autogenerated file. Do not modify.")
            versionNameResult = "$versionNumber-$versionType-${props['build'].replace(" ", "-")}"
        }

        applicationId "io.anuke.mindustry"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode code
        versionName versionNameResult
    }

    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/io.anuke.mindustry.AndroidLauncher'
}