apply plugin: "java"

version 'v0.5.0-dev'

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_1_8

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

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

ext {
    //the build number that this mod is made for
    mindustryVersion = 'v145'
    jabelVersion = "93fde537c7"

    multicrafterVersion = '1.8' // Custom build

    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"

    implementation "com.github.liplum:MultiCrafterLib:$multicrafterVersion"

    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 printVersion {
    println version
}

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(" ")

        //d8 doesn't work on windows (but required for Actions), so it set it to Dd8.bat if needed.
        def d8command = System.properties['os.name'].toLowerCase().contains('win') ? "d8.bat" : "d8"

        //dex and desugar files - this requires d8 in your PATH
        "$d8command $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 = "${project.archivesBaseName}Desktop.jar"

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

    from(rootDir) {
        include "mod.json"
        include "icon.png"
    }

    from("src/assets/") {
        include "**"
        exclude(
            "news/**",
            "sprites/tech.drawio.png",
            "sprites/blocks/**-placeholder.png"
        )  
    }
}

task deploy(type: Jar) {
    dependsOn jarAndroid
    dependsOn jar
    archiveFileName = "${project.archivesBaseName}-${version}.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"
        }
    }
}