/*
 * STAROPENSOURCE ENGINE SOURCE FILE
 * Copyright (c) 2024 The StarOpenSource Engine Authors
 * Licensed under the GNU Affero General Public License v3
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

// Plugins
plugins {
    id("java")
    id("io.freefair.lombok") version("${pluginLombok}")
    id("maven-publish")
}

// Dependencies
dependencies {
    // Lombok
    compileOnly("org.projectlombok:lombok:${dependencyLombok}")
    annotationProcessor("org.projectlombok:lombok:${dependencyLombok}")

    // JetBrains Annotations
    compileOnly("org.jetbrains:annotations:${dependencyJetbrainsAnnotations}")

    // Project
    implementation(project(":base"))
}

// Javadoc configuration
javadoc {
    outputs.upToDateWhen { false }  // Force task execution
    dependsOn(delombok)  // Make sure the source is delomboked first

    javadoc {
        setClasspath(files(project.sourceSets.main.compileClasspath))  // Include dependencies

        options {
            if (new File(projectDir, "src/main/javadoc/theme.css").exists())
                stylesheetFile = new File(projectDir, "src/main/javadoc/theme.css")  // Theming is cool :3
            setMemberLevel(JavadocMemberLevel.PUBLIC)  // Only display public stuff
            setOverview("src/main/javadoc/overview.html")  // We want a custom overview page to greet the visitor
            setLocale("en_US")  // 你好
            addStringOption("Xwerror", "-quiet") // Fail build on warning

            setJFlags([
                    "-Duser.language=en_US"  // See above
            ])
        }
    }
}

// Include javadoc and source jar during publishing
java {
    withJavadocJar()
    withSourcesJar()
}

// Build publishing configuration
// Note: You can safely ignore any errors or warnings thrown by your IDE here
publishing {
    repositories {
        maven {
            name = "staropensource"
            url = uri("https://mvn.staropensource.de/engine")
            credentials(org.gradle.api.credentials.PasswordCredentials)
            authentication {
                //noinspection GroovyAssignabilityCheck
                basic (BasicAuthentication)
            }
        }
    }
    publications {
        //noinspection GroovyAssignabilityCheck
        maven (MavenPublication) {
            groupId = group
            artifactId = project.getName()
            version = version
            //noinspection GroovyAssignabilityCheck
            from components.java
        }
    }
}

// Fix delombok task
delombok.doFirst {
    File target = file("${project.projectDir}/src/main/module-info.java")
    File source = file("${project.projectDir}/src/main/java/module-info.java")

    target.delete()
    source.renameTo(target)
}
delombok.doLast {
    File target = file("${project.projectDir}/src/main/java/module-info.java")
    File source = file("${project.projectDir}/src/main/module-info.java")

    target.delete()
    source.renameTo(target)
}