buildscript {
    repositories {
        mavenCentral()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
    }
}

apply plugin: 'java'
apply plugin: 'forge'
apply plugin: 'curseforge'
apply plugin: 'maven'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    maven { // the repo from which to get NEI and stuff
        name 'CB Repo'
        url "http://chickenbones.net/maven/"
    }
    maven { // The repo from which to get waila
        name "Mobius Repo"
        url "http://mobiusstrip.eu/maven"
    }
}
dependencies {
    compile('mcp.mobius.waila:Waila:1.5.11-RC2-NONEI_1.7.10') {
        exclude group: 'mcp.mobius.waila'
    }
    compile "codechicken:CodeChickenLib:1.7.10-1.1.3.136:dev"
    compile "codechicken:CodeChickenCore:1.7.10-1.0.6.43:dev"
    compile "codechicken:NotEnoughItems:1.7.10-1.0.4.105:dev"
}

ext.configFile = file "build.properties"

configFile.withReader {
    def prop = new Properties()
    prop.load(it)
    project.ext.config = new ConfigSlurper().parse prop
}

version = config.mod_version
group = "com.pahimar.ee3" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "EquivalentExchange3"

minecraft {
    version = config.minecraft_version + "-" + config.forge_version

    replaceIn "reference/Reference.java"
    replace "@MOD_VERSION@", "${config.mod_version}.${System.getenv("BUILD_NUMBER") ?: 0}"
    if (project.hasProperty("ee3_sha1_signature")) {
        replace "@FINGERPRINT@", project.ee3_sha1_signature
    }

    replaceIn "api/package-info.java"
    replace "@API_VERSION@", config.api_version

    replaceIn "api/array/package-info.java"
    replace "@API_VERSION@", config.api_version

    replaceIn "api/event/package-info.java"
    replace "@API_VERSION@", config.api_version

    replaceIn "api/exchange/package-info.java"
    replace "@API_VERSION@", config.api_version

    replaceIn "api/knowledge/package-info.java"
    replace "@API_VERSION@", config.api_version

    replaceIn "api/recipe/package-info.java"
    replace "@API_VERSION@", config.api_version

    replaceIn "api/util/package-info.java"
    replace "@API_VERSION@", config.api_version
}

version = "${config.minecraft_version}-${config.mod_version}.${System.getenv("BUILD_NUMBER") ?: 0}"

processResources {
    // exclude xcf files, as they are for development only
    exclude '**/*.xcf'

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include '*.info'

        // replace version and mcversion
        expand 'mod_version': project.version, 'minecraft_version': project.config.minecraft_version
    }

    // copy everything else, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude '**/*.info'
    }
}

task devJar(type: Jar, dependsOn: 'classes') {
    from(sourceSets.main.output) {
        include '**'
    }

    extension = 'jar'
    classifier = 'dev'
}

artifacts {
    archives devJar
}

import net.minecraftforge.gradle.delayed.*
import net.minecraftforge.gradle.tasks.dev.ChangelogTask

task createChangelog(type: ChangelogTask) {

    if (("${System.getenv().JOB_NAME}" != null) && project.hasProperty("jenkins_server") && project.hasProperty("jenkins_password")) {
        def jobName = "${System.getenv().JOB_NAME}"
        def buildNumber = "${System.getenv().BUILD_NUMBER}"

        setServerRoot(new DelayedString(project, project.jenkins_server))
        setJobName(new DelayedString(project, jobName.toString()))
        setAuthName(new DelayedString(project, project.jenkins_user))
        setAuthPassword(new DelayedString(project, project.jenkins_password))
        setTargetBuild({ buildNumber.toString() });
        setOutput(new DelayedFile(project, 'build/libs/' + project.archivesBaseName + '-' + project.version + '-changelog.txt'));
    }

    onlyIf {
        return (("${System.getenv().JOB_NAME}" != null) && project.hasProperty("jenkins_server") && project.hasProperty("jenkins_password"))
    }
}

tasks.build.dependsOn('createChangelog')
tasks.build.dependsOn('signJar')

if (!project.hasProperty("keystore_location")) // keystore stuff
    ext.keystore_location = "."
if (!project.hasProperty("keystore_password")) // keystore stuff
    ext.keystore_password = ""
if (!project.hasProperty("ee3_keystore_alias")) // keystore stuff
    ext.ee3_keystore_alias = ""

task signJar(dependsOn: ["reobf", "devJar"]) {
    inputs.dir jar.destinationDir
    inputs.file keystore_location
    inputs.property "ee3_keystore_alias", ee3_keystore_alias
    inputs.property "keystore_password", keystore_password
    outputs.dir devJar.destinationDir

    // only sign if the keystore exists
    onlyIf {
        return keystore_location != "." && keystore_password != ""
    }
    // the actual action.. sign the jar.
    doLast {
        jar.destinationDir.eachFile { file ->
            if (!file.getPath().endsWith(".jar"))
                return; // skip non-jars

            logger.lifecycle "signing $file"
            ant.signjar(
                    destDir: file.getParentFile(), // same place it came from
                    jar: file,
                    keystore: keystore_location,
                    alias: ee3_keystore_alias,
                    storepass: keystore_password
            )
        }
    }
}

curse {
    dependsOn 'reobf'
    onlyIf { return project.hasProperty('ee3_curseforge_apikey') }

    projectId = project.hasProperty('ee3_curseforge_projectid') ? project.ee3_curseforge_projectid : ''
    apiKey = project.hasProperty('ee3_curseforge_apikey') ? project.ee3_curseforge_apikey : ''
    changelog = project.hasProperty('changelog') ? project.changelog : ''
    releaseType = config.release_type

    additionalArtifact devJar
}

uploadArchives {
    repositories {
        mavenDeployer {
            if (project.hasProperty("forgemaven_url")) {
                logger.info('Publishing to files server')
                repository(url: project.forgemaven_url) {
                    authentication(userName: project.forgemaven_username, password: project.forgemaven_password)
                }
            }

            pom {
                groupId = project.group
                version = project.version
                artifactId = project.archivesBaseName
            }

            pom.project {
                name project.archivesBaseName
                packaging 'jar'
                description 'Equivalent Exchange 3'
                url 'https://github.com/pahimar/Equivalent-Exchange-3/'

                scm {
                    url 'https://github.com/pahimar/Equivalent-Exchange-3/'
                    connection 'scm:git:git://github.com/pahimar/Equivalent-Exchange-3.git'
                    developerConnection 'scm:git:git@github.com/pahimar/Equivalent-Exchange-3.git'
                }

                issueManagement {
                    system 'github'
                    url 'https://github.com/pahimar/Equivalent-Exchange-3/issues'
                }

                licenses {
                    license {
                        name 'GNU Lesser General Public License 3.0'
                        url 'https://www.gnu.org/licenses/lgpl-3.0.txt'
                        distribution 'repo'
                    }
                }

                developers {
                    developer {
                        id 'Pahimar'
                        name 'Pahimar'
                        roles {
                            role 'developer'
                        }
                    }
                }
            }
        }
    }
}
