// This is to suppress false warnings generated by a bug in IntelliJ
@file:Suppress("DSL_SCOPE_VIOLATION", "MISSING_DEPENDENCY_CLASS", "FUNCTION_CALL_EXPECTED", "PropertyName")

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    java
    `maven-publish`

    alias(libs.plugins.kotlin)
    alias(libs.plugins.quilt.loom)
}

val archives_base_name: String by project

group = "com.example"
version = project.version.toString()
base.archivesName.set(archives_base_name)

val javaVersion = 17

repositories {
    // Add repositories to retrieve artifacts from in here.
    // You should only use this when depending on other mods because
    // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
    // See https://docs.gradle.org/current/userguide/declaring_repositories.html
    // for more information about repositories.
}

// All the dependencies are declared at gradle/libs.version.toml and referenced with "libs.<id>"
// See https://docs.gradle.org/current/userguide/platforms.html for information on how version catalogs work.
dependencies {
    minecraft(libs.minecraft)
    mappings(
        variantOf(libs.quilt.mappings) {
            classifier("intermediary-v2")
        }
    )

    // Replace the above line with the block below if you want to use Mojang mappings as your primary mappings, falling back on QM for parameters and Javadocs
    /*
    mappings(
        loom.layered {
            mappings(variantOf(libs.quilt.mappings) { classifier("intermediary-v2") })
            officialMojangMappings()
        }
    )
    */

    modImplementation(libs.quilt.loader)


    // QSL is not a complete API; You will need Quilted Fabric API to fill in the gaps.
    // Quilted Fabric API will automatically pull in the correct QSL version.
    modImplementation(libs.qfapi)
    // modImplementation(libs.bundles.qfapi) // If you wish to use the deprecated Fabric API modules

    modImplementation(libs.qkl)
}

tasks {
    withType<KotlinCompile> {
        kotlinOptions {
            jvmTarget = javaVersion.toString()
            languageVersion = libs.plugins.kotlin.get().version.strictVersion
            incremental = true
        }
    }

    withType<JavaCompile> {
        options.encoding = "UTF-8"
        options.isDeprecation = true
        options.isIncremental = true
        options.release.set(javaVersion)
    }

    processResources {
        inputs.property("version", project.version)

        filesMatching("quilt.mod.json") {
            expand(
                mapOf(
                    "version" to project.version
                )
            )
        }
    }

    // Change the gradle version here and run `./gradlew wrapper` or `gradle wrapper` to update gradle scripts
    // BIN distribution should be sufficient for the majority of mods
    wrapper {
        gradleVersion = "7.6"
        distributionType = Wrapper.DistributionType.BIN
    }

    remapJar {
        dependsOn(remapSourcesJar)
    }

    jar {
        from("LICENSE")
    }
}

kotlin {
    jvmToolchain(javaVersion)
}

java {
    // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task if it is present.
    // If you remove this line, sources will not be generated.
    withSourcesJar()

    // If this mod is going to be a library, then it should also generate Javadocs in order to aid with development.
    // Uncomment this line to generate them.
    // withJavadocJar()

    // Still required by IDEs such as Eclipse and VSC
    sourceCompatibility = JavaVersion.toVersion(javaVersion)
    targetCompatibility = JavaVersion.toVersion(javaVersion)
}


val sourceJar = task("sourceJar", Jar::class) {
    dependsOn(tasks["classes"])
    archiveClassifier.set("source")
    from(sourceSets.main.get().allSource)
}

val javadoc = task("javadocJar", Jar::class) {
    archiveClassifier.set("javadoc")
    from(tasks.javadoc)
    from(tasks.javadoc)
}


// Configure the maven publication
publishing {
    publications {
        create<MavenPublication>("Maven") {
            from(components.getByName("java"))
            artifact(javadoc)
            artifact(sourceJar)
        }

        // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
        repositories {
            // Add repositories to publish to here.
            // Notice: This block does NOT have the same function as the block in the top level.
            // The repositories here will be used for publishing your artifact, not for
            // retrieving dependencies.
        }
    }
}