apply plugin: "java"

version '1.0'

sourceSets.main.java.srcDirs = ["src"]

repositories{
    mavenCentral()
    maven{ url "https://raw.githubusercontent.com/Zelaux/MindustryRepo/master/repository" }
    maven{ url 'https://www.jitpack.io' }
}

java{
    targetCompatibility = 8
    sourceCompatibility = JavaVersion.VERSION_17
}

ext{
    //the build number that this mod is made for
    mindustryVersion = 'v150.1'
    jabelVersion = "93fde537c7"
    //windows sucks
    isWindows = System.getProperty("os.name").toLowerCase().contains("windows")
    sdkRoot = System.getenv("ANDROID_HOME") ?: System.getenv("ANDROID_SDK_ROOT")
}

//java 8 backwards compatibility flag
allprojects{
    tasks.withType(JavaCompile){
        options.compilerArgs.addAll(['--release', '8'])
    }
}

dependencies{
    compileOnly "com.github.Anuken.Arc:arc-core:$mindustryVersion"
    compileOnly "com.github.Anuken.Mindustry:core:$mindustryVersion"

    annotationProcessor "com.github.Anuken:jabel:$jabelVersion"
}

//force arc version
configurations.all{
    resolutionStrategy.eachDependency { details ->
        if(details.requested.group == 'com.github.Anuken.Arc'){
            details.useVersion "$mindustryVersion"
        }
    }
}

task jarAndroid{
    dependsOn "jar"

    doLast{
        if(!sdkRoot || !new File(sdkRoot).exists()) throw new GradleException("No valid Android SDK found. Ensure that ANDROID_HOME is set to your Android SDK directory.");

        def platformRoot = new File("$sdkRoot/platforms/").listFiles().sort().reverse().find{ f -> new File(f, "android.jar").exists()}

        if(!platformRoot) throw new GradleException("No android.jar found. Ensure that you have an Android platform installed.")

        //collect dependencies needed for desugaring
        def dependencies = (configurations.compileClasspath.asList() + configurations.runtimeClasspath.asList() + [new File(platformRoot, "android.jar")]).collect{ "--classpath $it.path" }.join(" ")

        def d8 = isWindows ? "d8.bat" : "d8"

        //dex and desugar files - this requires d8 in your PATH
        "$d8 $dependencies --min-api 14 --output ${project.archivesBaseName}Android.jar ${project.archivesBaseName}Desktop.jar"
            .execute(null, new File("$buildDir/libs")).waitForProcessOutput(System.out, System.err)
    }
}

jar{
    archiveFileName = "${base.archivesBaseName}Desktop.jar"

    from{
        configurations.runtimeClasspath.collect{ it.isDirectory() ? it : zipTree(it) }
    }

    from(projectDir){
        include "mod.hjson"
    }

    from("assets/"){
        include "**"
    }
}

task deploy(type: Jar){
    dependsOn jarAndroid
    dependsOn jar
    archiveFileName = "${base.archivesBaseName}.jar"

    from{ [zipTree("$buildDir/libs/${project.archivesBaseName}Desktop.jar"), zipTree("$buildDir/libs/${project.archivesBaseName}Android.jar")] }

    doLast{
        delete{
            delete "$buildDir/libs/${project.archivesBaseName}Desktop.jar"
            delete "$buildDir/libs/${project.archivesBaseName}Android.jar"
        }
    }
}
