import org.ajoberstar.grgit.Grgit

buildscript {
    repositories {
        mavenCentral()
        maven { url = "https://oss.sonatype.org/content/repositories/snapshots/" }
        jcenter()
    }
    dependencies {
        classpath("com.github.jengelman.gradle.plugins:shadow:5.0.0")
        classpath 'gradle.plugin.nl.javadude.gradle.plugins:license-gradle-plugin:0.14.0'
        classpath 'com.bmuschko:gradle-nexus-plugin:2.3.1'
    }
    configurations.all {
        resolutionStrategy {
            force("org.ow2.asm:asm:8.0.1")
            force("org.jetbrains:annotations:19.0.0")
        }
    }
}

plugins {
    id "maven-publish"
    id "org.ajoberstar.grgit" version "4.0.1"
}

group = "com.plotsquared"

ext {
    git = Grgit.open(dir: new File(rootDir.toString() + "/.git"))
}

def ver = "5.12.0"
def versuffix = ""
ext {
    if (project.hasProperty("versionsuffix")) {
        versuffix = "-$versionsuffix"
    }
}
version = ver + versuffix

description = rootProject.name

allprojects {
    apply(plugin: 'com.github.hierynomus.license')
    apply(plugin: 'com.bmuschko.nexus')

    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xmaxerrs" << "1000"
        }
    }
    license {
        header rootProject.file('HEADER')
        mapping 'java', 'SLASHSTAR_STYLE'
        ext.year = 2020
        includes(["**/*.java","**/*.js"])
    }
    nexus {
        sign = false
        repositoryUrl = 'https://mvn.intellectualsites.com/content/repositories/releases/'
        snapshotRepositoryUrl = 'https://mvn.intellectualsites.com/content/repositories/snapshots/'
    }
}

subprojects {
    apply(plugin: "java")
    apply(plugin: "maven")
    apply(plugin: "eclipse")
    apply(plugin: "idea")
    apply(plugin: "com.github.johnrengelman.shadow")

    group = "com.plotsquared"

    clean.doFirst {
        delete("../target")
    }

    dependencies {
        compile group: 'org.json', name: 'json', version: '20200518'

        implementation("com.sk89q.worldedit:worldedit-core:7.0.0") {
            exclude(module: "bukkit-classloader-check")
            exclude(module: "mockito-core")
            exclude(module: "dummypermscompat")
        }

        implementation("net.kyori:text-api:3.0.2")
        implementation("net.kyori:text-serializer-gson:3.0.2")
        implementation("net.kyori:text-serializer-legacy:3.0.2")
        implementation("net.kyori:text-serializer-plain:3.0.2")
        implementation("com.google.guava:guava:21.0") {
            because("Minecraft uses Guava 21 as of 1.13")
        }
        compileOnly("org.jetbrains:annotations:19.0.0")
        compileClasspath("org.projectlombok:lombok:1.18.12")
        testCompileOnly("org.projectlombok:lombok:1.18.12")
        annotationProcessor("org.projectlombok:lombok:1.18.8")
        testAnnotationProcessor("org.projectlombok:lombok:1.18.8")
        testImplementation("junit:junit:4.13")
    }

    configurations.all {
        resolutionStrategy {
            force("junit:junit:4.12")
            force("com.google.guava:guava:21.0")
            force("org.jetbrains:annotations:19.0.0")
            force("com.google.code.findbugs:jsr305:3.0.2")
        }
    }

    repositories {
        mavenCentral()
        maven { url = "https://maven.enginehub.org/repo/" }
        maven { url = "https://repo.maven.apache.org/maven2" }
        maven { url = "https://jitpack.io" }
    }

    shadowJar {
        dependencies {
            include(dependency("org.json:json:20200518"))
            include(dependency("net.kyori:text-api:3.0.2"))
        }
        relocate("io.papermc.lib", "com.plotsquared.bukkit.paperlib")
        relocate("org.json", "com.plotsquared.json") {
            exclude "org/json/simple/**"
        }
        // relocate('org.mcstats', 'com.plotsquared.stats')
        archiveFileName = "${project.name}-${parent.version}.jar"
        destinationDirectory = file "../target"
    }

    version = rootProject.version
}

task aggregatedJavadocs(type: Javadoc, description: "Generate javadocs from all child projects as if it was a single project", group: "Documentation") {
    destinationDir = file("./docs/javadoc")
    title = "$project.name $version API"
    options.author true
    options.links "http://docs.spring.io/spring/docs/4.3.x/javadoc-api/", "http://docs.oracle.com/javase/8/docs/api/", "http://docs.spring.io/spring-ws/docs/2.3.0.RELEASE/api/", "http://docs.spring.io/spring-security/site/docs/4.0.4.RELEASE/apidocs/"
    options.addStringOption("Xdoclint:none", "-quiet")

    delete("./docs")

    subprojects.each { proj ->
        proj.tasks.withType(Javadoc).each { javadocTask ->
            source += javadocTask.source
            classpath += javadocTask.classpath
            excludes += javadocTask.excludes
            includes += javadocTask.includes
        }
    }
}
