apply plugin: "java"

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

project.ext.mainClassName = "io.anuke.mindustry.desktop.DesktopLauncher"
project.ext.assetsDir = new File("../core/assets")


import com.badlogicgames.packr.Packr
import com.badlogicgames.packr.PackrConfig

def JDK_DIR = "$System.env.PACKR_DIR"
def ICON_DIR = new File("core/assets/sprites/icon.icns")

ext.getPlatform = {
    def lc = project.hasProperty("platform") ? platform.toLowerCase() : ""
    if(lc == "windows64"){
        return PackrConfig.Platform.Windows64
    }else if(lc == "windows32"){
        return PackrConfig.Platform.Windows32
    }else if(lc == "linux"){
        return PackrConfig.Platform.Linux64
    }else if(lc == "mac"){
        return PackrConfig.Platform.MacOS
    }else{
        throw new InvalidUserDataException("Invalid platform. Set platform with -Pplatform=windows64/windows32/linux/mac")
    }
}

task run(dependsOn: classes, type: JavaExec){
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    if(System.getProperty("os.name").toLowerCase().contains("mac")){
        jvmArgs "-XstartOnFirstThread"
    }
    ignoreExitValue = true
    if(project.hasProperty("args")){
        args Eval.me(project.getProperties()["args"])
    }

    if(args.contains("debug")){
        main = "io.anuke.mindustry.DebugLauncher"
    }
}

task debug(dependsOn: classes, type: JavaExec){
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    ignoreExitValue = true
    debug = true
}

task dist(type: Jar){
    dependsOn classes

    writeVersion()

    from files(sourceSets.main.output.classesDirs)
    from files(sourceSets.main.output.resourcesDir)
    from{ configurations.compile.collect{ zipTree(it) } }
    from files(project.assetsDir)

    manifest{
        attributes 'Main-Class': project.mainClassName
    }
}

//note: call desktop:dist beforehand
task packrCmd(){

    doLast{
        def config = new PackrConfig()
        config.with{
            config.executable = appName
            verbose = true
            platform = getPlatform()
            bundleIdentifier = getPackage() + ".mac"
            iconResource = ICON_DIR
            outDir = file("packr-out/")
            mainClass = project.ext.mainClassName
            classpath = ["desktop/build/libs/desktop-release.jar"]
            removePlatformLibs = ["desktop/build/libs/desktop-release.jar"]

            vmArgs = ["Djava.net.preferIPv4Stack=true"]
            minimizeJre = "desktop/packr_minimize.json"
            jdk = JDK_DIR + "jdk-${getPlatform().toString().toLowerCase()}.zip"

            if(getPlatform() == PackrConfig.Platform.MacOS){
                vmArgs += "XstartOnFirstThread"
            }
        }

        new Packr().pack(config)
    }
}

task copyTemplate(){
    doLast{
        copy{
            into "packr-out/"
            from "${JDK_DIR}/templates/${getPlatform().toString().toLowerCase()}"
        }

        copy{
            into "packr-out/"
            from "build/libs/desktop-release.jar"
        }
    }
}

task packrZip(){
    task clearOut(type: Delete){
        doLast{
            delete "packr-out/"
        }
    }

    task fixMac(type: Copy){
        dependsOn "packrCmd"

        into "packr-out/" + appName + ".app/Contents/"
        from "packr-out/Contents/"

        doLast{
            delete{
                delete "packr-out/Contents/"
            }
        }
    }

    task fixWindows32(type: Copy){
        dependsOn "packrCmd"

        into "packr-out/jre/bin/"
        from JDK_DIR + "zip.dll"
        rename("zip.dll", "ojdkbuild_zlib.dll")

        doLast{
            copy{
                into "packr-out/jre/bin/"
                from JDK_DIR + "zip.dll"
            }
        }
    }

    finalizedBy "clearOut"

    if(project.hasProperty("platform")){
        def plat = getPlatform()
        if(plat == PackrConfig.Platform.Windows32 || plat == PackrConfig.Platform.Windows64){
            dependsOn "copyTemplate"
        }else{
            dependsOn "packrCmd"

            if(getPlatform() == PackrConfig.Platform.MacOS){
                dependsOn "fixMac"
            }

            if(getPlatform() == PackrConfig.Platform.Windows32){
                dependsOn "fixWindows32"
            }
        }

        task rzip(type: Zip){
            from "packr-out/"
            archiveName "$appName-${getPlatform()}-${getVersionString()}.zip"
            destinationDir(file("packr-export"))
        }

        finalizedBy 'rzip'
    }
}
