plugins {
    id "java"
    id "maven-publish"
    id "net.minecrell.plugin-yml.bukkit" version "0.5.1"
    id "com.github.johnrengelman.shadow" version "7.1.2"
}

dependencies {
    library "org.projectlombok:lombok:1.18.22"
    annotationProcessor "org.projectlombok:lombok:1.18.22"
    library "org.json:json:20220320"
    library "commons-io:commons-io:2.11.0"
    library "dev.morphia.morphia:morphia-core:2.2.6"
    library "redis.clients:jedis:4.2.1"
    library "org.mariadb.jdbc:mariadb-java-client:3.0.4"
    library "com.zaxxer:HikariCP:5.0.1"
    library "org.apache.httpcomponents:httpclient:4.5.13"
    library "org.apache.commons:commons-lang3:3.12.0"
    library "org.apache.maven.resolver:maven-resolver-api:1.7.3"
    library "org.apache.maven.resolver:maven-resolver-impl:1.7.3"
    library "org.apache.maven.resolver:maven-resolver-connector-basic:1.7.3"
    library "org.apache.maven.resolver:maven-resolver-transport-http:1.7.3"
    library "org.apache.maven:maven-resolver-provider:3.8.5"
    library "org.eclipse.jetty:jetty-server:11.0.9"
    library "org.eclipse.jetty:jetty-servlet:11.0.9"
    library "org.eclipse.jetty:jetty-proxy:11.0.9"
    library "com.google.code.gson:gson:2.9.0"
    compileOnly "io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT"
    implementation "org.bstats:bstats-base:3.0.0"
    implementation "org.bstats:bstats-bukkit:3.0.0"
}

group = "dev.plex"
version = rootProject.version
description = "Plex-Core"

shadowJar {
    archiveClassifier.set("")
    archiveBaseName.set("Plex")
    archiveVersion.set("")
    relocate "org.bstats", "dev.plex"
}

tasks.jar {
    archiveBaseName.set("Plex")
    archiveVersion.set("")
}

bukkit {
    name = "Plex"
    version = rootProject.version
    description = "Plex provides a new experience for freedom servers."
    main = "dev.plex.Plex"
    website = "https://plex.us.org"
    authors = ["Telesphoreo", "taahanis", "super"]
    apiVersion = "1.18"
}

String getGitHash() {
    def stdout = new ByteArrayOutputStream()
    try {
        exec {
            commandLine "git", "rev-parse", "--short", "HEAD"
            standardOutput = stdout
            ignoreExitValue = true
        }
    } catch (GradleException e) {
        logger.error("Couldn't determine Git head because Git is not installed. " + e.getMessage())
    }
    return stdout.size() > 0 ? stdout.toString().trim() : "unknown"
}

String getBuildNumber() {
    def stdout = new ByteArrayOutputStream()
    try {
        exec {
            commandLine "git", "rev-list", "HEAD", "--count"
            standardOutput = stdout
            ignoreExitValue = true
        }
    } catch (GradleException e) {
        logger.error("Couldn't determine build number because Git is not installed. " + e.getMessage())
    }
    return stdout.size() ? stdout.toString().trim() + " (local)" : "unknown"
}

static def getDate() {
    return new Date().format("MM/dd/yyyy '<light_purple>at<gold>' hh:mm:ss a")
}

task buildProperties {
    ant.propertyfile(file: "$project.projectDir/src/main/resources/build.properties") {
        entry(key: "buildAuthor", default: System.getenv("JENKINS_URL") != null ? "jenkins" : "unknown")
        entry(key: "buildNumber", value: System.getenv("JENKINS_URL") != null ? System.getenv("BUILD_NUMBER") + " (Jenkins)" : getBuildNumber())
        entry(key: "buildDate", value: getDate())
        entry(key: "buildHead", value: getGitHash())
    }
}

tasks {
    build {
        dependsOn(shadowJar)
        finalizedBy(buildProperties)
        finalizedBy(rootProject.tasks.copyJars)
    }

    javadoc {
        options.memberLevel = JavadocMemberLevel.PRIVATE
    }
}