buildscript {
    repositories {
        jcenter()
        maven {
            name 'forge'
            url 'http://files.minecraftforge.net/maven'
        }
        maven {
            name = 'sponge'
            url = 'https://repo.spongepowered.org/maven'
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
        classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT'
        classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4'
    }
}

plugins {
    id 'org.ajoberstar.grgit' version '1.7.2'
    id 'maven-publish'
}

apply plugin: 'net.minecraftforge.gradle.liteloader'
apply plugin: 'org.spongepowered.mixin'
apply plugin: 'com.github.johnrengelman.shadow'

ext {
    revision = grgit.log().size()
    hash = grgit.head().abbreviatedId
    if (file('.git/shallow').exists()) {
        // don't clone with --depth
        revision = -1
        hash += " shallow"
    }
}

version = "${project.minecraft_version}.${project.version}"

if (project.release != 'RELEASE') {
    version += "-${project.release}"
}
if (project.release == 'SNAPSHOT') {
    version += "-${project.revision}-${project.hash}"
}

group = project.group
description = project.displayname

minecraft {
    version = project.minecraft_version
    mappings = project.mappings_version
    runDir = 'run'
    replace '@VERSION@', project.version
}

mixin {
    defaultObfuscationEnv notch
}

targetCompatibility = 1.8
sourceCompatibility = 1.8
sourceSets {
    hdskins {
        compileClasspath += main.compileClasspath
        ext.refMap = 'hdskins.mixin.refmap.json'
    }
    main {
        compileClasspath += hdskins.output
        ext.refMap = 'minelp.mixin.refmap.json'
    }
}

dependencies {
    // use the same version as httpclient
    compile('org.apache.httpcomponents:httpmime:4.3.2') {
        transitive = false
    }
    compile('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
        transitive = false
    }
}

manifest {
    attributes 'Implementation-Version': "${project.version} (git-${project.hash})"
}

litemod.json {
    mcversion = project.minecraft_version
    displayName = project.displayname
    author = project.authors
    revision = project.revision
    description = project.description
    description.minelittlepony = project.description_mlp
    description.hdskinsmod = project.description_hd
    mixinConfigs += [
      'minelp.mixin.json',
      'hdskins.mixin.json'
    ]
}

archivesBaseName = "mod-${project.name.toLowerCase()}"

afterEvaluate {
    file('build.number').delete()
}

jar {
    from sourceSets.hdskins.output
    from litemod
    classifier 'base'
    extension 'jar'
}

task copyBGPones(type: Copy) {

    def illegals = /[^a-z0-9_\/.-]/

    from "skins/Background Ponies"
    // TODO: What is tempDir????
    into temporaryDir

    eachFile {
        if (it.name =~ illegals){
            logger.warn("Sanitizing file with illegal characters: ${it.path}")
            it.name = it.name.replaceAll(/\s/, '_').replaceAll(illegals, '')
        }
    }
}

shadowJar {
    extension 'litemod'
    classifier "mc$minecraft.version"

    from sourceSets.hdskins.output
    from litemod

    exclude "/assets/minelittlepony/textures/entity/pony"
    from(copyBGPones) {
        into "/assets/minelittlepony/textures/entity/pony"
    }

    dependencies {
        exclude dependency('deobf.com.mumfrey:liteloader:')
        exclude dependency('deobf.org.ow2.asm:')
        exclude dependency('org.spongepowered:mixin:')
        exclude 'META-INF/**'
    }

    relocate 'org.apache.http.entity.mime', 'com.voxelmodpack.repack.org.apache.http.entity.mime'
    exclude 'dummyThing'
    doLast {
        file('build/libs/' + archivesBaseName + '-' + version + '-base.jar').delete();
    }
}

task srgJar(type: Jar) {
    from sourceSets.main.output
    from sourceSets.hdskins.output
    from litemod

    classifier "mc$minecraft.version-srg"
}

reobf {
    srgJar {
        mappingType = 'SEARGE'
    }

    shadowJar{}
}

publishing {
    publications {
        maven(MavenPublication) {
            afterEvaluate {
                artifact(shadowJar)
            }
            artifact(shadowJar) {
                //builtBy remapSourcesJar
            }

            pom {
                name = "MineLittlePony"
                description = "HD Skins support for Minecraft"
                url = "https://minelittlepony-mod.com"
                licenses {
                    license {
                        name = "MIT Public License"
                        url = "https://tlo.mit.edu/learn-about-intellectual-property/software-and-open-source-licensing"
                    }
                }
                developers {
                    developer {
                        id = "killjoy1221"
                        name = "Matthew Messinger"
                        email = "mattmess1221@gmail.com"
                    }
                    developer {
                        id = "sollace"
                    }
                }
                scm {
                    connection = 'scm:git:git://github.com/MineLittlePony/MineLittlePony.git'
                    developerConnection = 'scm:git:ssh://github.com/MineLittlePony/MineLittlePony.git'
                    url = 'https://github.com/MineLittlePony/MineLittlePony'
                }
            }
        }
    }

    repositories {
        maven {
            name = "MineLittlePony"
            def mvn = 's3://repo.minelittlepony-mod.com/maven'
            url = release == 'SNAPSHOT' ? "$mvn/snapshot" : "$mvn/release"

            credentials(AwsCredentials) {
                accessKey = System.env.ACCESS_KEY
                secretKey = System.env.SECRET_KEY
            }
        }
    }
}