import groovy.json.JsonOutput

def mainVersion = "1.7"
def buildNumber = "27"

// For those who want the bleeding edge
buildscript {
    repositories {
        jcenter()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
    }
}
apply plugin: 'net.minecraftforge.gradle.forge'

/*
// for people who want stable - not yet functional for MC 1.8.8 - we require the forgegradle 2.1 snapshot
plugins {
    id "net.minecraftforge.gradle.forge" version "2.0.2"
}
*/
version = "${mainVersion}-${buildNumber}"
group= "malte0811"
archivesBaseName = "IndustrialWires"

sourceCompatibility = 1.8
targetCompatibility = 1.8

minecraft {
    version = "14.23.4.2745"
    runDir = "run"

    replace '${version}', project.version
    mappings = "snapshot_20171003"
}

repositories {
    maven {
        name 'ic2'
        url 'http://maven.ic2.player.to/'
    }
    maven {
        name 'tr'
        url 'http://maven.modmuss50.me'
    }
    maven {
        name 'jared maven'
        url 'http://blamejared.com/maven'
    }
    maven { // Albedo/Mirage Lights
        url 'https://repo.elytradev.com/'
    }
    maven { // JEI & Tinkers
        name 'DVS1 Maven FS'
        url 'http://dvs1.progwml6.com/files/maven'
    }
    // dependencies of TR...
    maven {

        url 'http://maven.mcmoddev.com'
    }
    maven {
        // HWYLA
        name "TehNut"
        url "http://tehnut.info/maven/"
    }
    repositories {//Curseforge maven for project red
        maven {
            name = "CurseForge"
            url = "https://minecraft.curseforge.com/api/maven/"
        }
    }
    maven {
        name = "chickenbones"
        url = "http://chickenbones.net/maven"
    }
}

dependencies {
    deobfCompile 'net.industrial-craft:industrialcraft-2:2.8.+'
    deobfCompile "blusunrize:ImmersiveEngineering:0.12-+"
    deobfCompile "project-red-base:ProjectRed-1.12.2:4.9.1.92:Base"
    runtime "project-red-integration:ProjectRed-1.12.2:4.9.1.92:integration"
    runtime "forge-multipart-cbe:ForgeMultipart-1.12.2:2.5.0.69:universal"
    runtime "codechicken:CodeChickenLib:1.12.2-3.2.1.349:universal"
    runtime "codechicken:ChickenASM:1.12-1.0.2.7"
    runtime "mrtjpcore:MrTJPCore-1.12.2:2.1.3.35:universal"
    compileOnly "TechReborn:TechReborn-1.12:2.6.+:dev"
    compileOnly "RebornCore:RebornCore-1.12:3.2.+:dev"
    compileOnly 'com.elytradev:mirage:2.0.1-SNAPSHOT'
    compileOnly "mezz.jei:jei_1.12:4.+"
    compileOnly "CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.8.460"

}

jar {
	from 'LICENSE'
    manifest {
        attributes 'Maven-Artifact': group+':'+archivesBaseName+':'+version
		attributes "FMLAT": "industrialwires_at.cfg"
    }
}

task signMain(type: SignJar) {
    onlyIf {
        project.hasProperty('keyStore')
    }
    dependsOn reobfJar
    if (project.hasProperty('keyStore')) {
        keyStore = project.keyStore
        alias = project.storeAlias
        storePass = project.storePass
        keyPass = project.storePass
        inputFile = jar.archivePath
        outputFile = jar.archivePath
    }
}

build.dependsOn signMain

processResources
{
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'
                
        // replace version and mcversion
        expand 'version':project.version, 'mcversion':project.minecraft.version
    }
        
    // copy everything else, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}

//Code for automatic update JSON generation
class GenerateUpdateJSON extends DefaultTask {
    static def IW_VERSION_PREFIX = "####Version "
    static def MC_VERSION_PREFIX = "###Minecraft "
    static def UNFINISHED_SUFFIX = " - UNFINISHED"
    static def RECOMMENDED = "-recommended"
    static def LATEST = "-latest"
    static def CF_URL = "https://minecraft.curseforge.com/projects/industrial-wires"

    int compareVersions(String vA, String vB) {
        String[] vPartsA = vA.split("[\\D]")
        String[] vPartsB = vB.split("[\\D]")
        if (vPartsA.length==0&&vPartsB.length==0)
            return vA <=> vB
        else if (vPartsA.length==0)
            return -1
        else if (vPartsB.length==0)
            return 1

        int length = Math.min(vPartsA.length, vPartsB.length)
        for (int i = 0;i<length;i++) {
            int pA = Integer.parseInt(vPartsA[i])
            int pB = Integer.parseInt(vPartsB[i])
            if (pA!=pB) {
                return pA<=>pB
            }
        }
        if (vPartsA.length != vPartsB.length)
            return vPartsA.length <=> vPartsB.length
        return vA <=> vB
    }

    def addChangelog(Map<String, Map<String, String>> changelogForVersions, Map<String, String> promos,
                     String currentMCVersion, String currentVersion, String currentChangelog) {
        if (!changelogForVersions.containsKey(currentMCVersion)) {
            promos.put(currentMCVersion+RECOMMENDED, currentVersion)
            promos.put(currentMCVersion+LATEST, currentVersion)
            changelogForVersions[currentMCVersion] = new TreeMap<>({String s1, String s2->
                compareVersions(s1, s2)})
        }
        changelogForVersions[currentMCVersion][currentVersion] = currentChangelog
    }

    @TaskAction
    def generate() {
        File changelog = new File("changelog.md")
        if (!changelog.exists())
            println "Changelog does not exist! Aborting!"
        else {
            String currentMCVersion = "";
            Map<String, Map<String, String>> changelogForVersions = new HashMap<>()
            Map<String, String> promos = new TreeMap<>({String s1, String s2->
                compareVersions(s1, s2)})
            String currentVersion = null
            String currentChangelog = ""
            changelog.eachLine {line ->
                if (line.startsWith(IW_VERSION_PREFIX)) {
                    if (currentVersion!=null) {
                        addChangelog(changelogForVersions, promos, currentMCVersion, currentVersion, currentChangelog)
                    }
                    if (!line.endsWith(UNFINISHED_SUFFIX)) {
                        currentVersion = line.substring(IW_VERSION_PREFIX.length())
                    } else {
                        currentVersion = (String) null
                    }
                    currentChangelog = ""
                } else if (line.startsWith(MC_VERSION_PREFIX)) {
                    if (currentVersion!=null) {
                        addChangelog(changelogForVersions, promos, currentMCVersion, currentVersion, currentChangelog)
                    }
                    currentChangelog = ""
                    currentVersion = (String) null
                    currentMCVersion = line.substring(MC_VERSION_PREFIX.length())
                } else if (!line.isEmpty()) {
                    if (currentChangelog.length()==0)
                        currentChangelog += line
                    else
                        currentChangelog += "\n"+line
                }
            }
            Map<String, Object> mainMap = new TreeMap<>({String s1, String s2->
                compareVersions(s1, s2)})
            mainMap.putAll(changelogForVersions)
            mainMap["homepage"] = CF_URL
            mainMap["promos"] = promos
            def outJson = JsonOutput.toJson(mainMap)
            outJson = JsonOutput.prettyPrint(outJson)
            File outF = new File("changelog.json")
            outF.delete()
            outF << outJson
        }
    }
}

task updateJson(type: GenerateUpdateJSON)

build.finalizedBy updateJson
