plugins {
    id "com.github.johnrengelman.shadow" version "7.1.2"
    id "me.shedaniel.unified-publishing"
}

loom {
    accessWidenerPath = project(":common").loom.accessWidenerPath
}

architectury {
    platformSetupLoomIde()
    fabric()
}

configurations {
    common
    shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
    compileClasspath.extendsFrom common
    runtimeClasspath.extendsFrom common
    developmentFabric.extendsFrom common
}

repositories {
    maven { url "https://maven.terraformersmc.com/releases/" }
}

dependencies {
    modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
    modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}"
    modCompileOnly("com.terraformersmc:modmenu:${rootProject.mod_menu_version}") { transitive false }

    common(project(path: ":common", configuration: "namedElements")) { transitive false }
    shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive false }
}

processResources {
    filesMatching("fabric.mod.json") {
        expand "version": project.version
    }
    inputs.property "version", project.version
}

shadowJar {
    exclude "architectury-common.accessWidener"
    exclude "architectury.common.json"

    configurations = [project.configurations.shadowCommon]
    archiveClassifier = "dev-shadow"
}

remapJar {
    injectAccessWidener = true
    input.set shadowJar.archiveFile
    dependsOn shadowJar
    archiveClassifier = null
}

task renameJarForPublication(type: Zip, dependsOn: remapJar) {
    from remapJar.archiveFile.map { zipTree(it) }
    archiveExtension = "jar"
    metadataCharset "UTF-8"
    destinationDirectory = base.libsDirectory
    archiveClassifier = project.name
}

assemble.dependsOn renameJarForPublication

jar {
    archiveClassifier = "dev"
}

sourcesJar {
    afterEvaluate {
        [":common"].forEach {
            def depSources = project(it).sourcesJar
            dependsOn depSources
            from(depSources.archiveFile.map { zipTree(it) }) {
                exclude "architectury.accessWidener"
            }
        }
    }
}

components.java {
    withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
        skip()
    }
}

publishing {
    publications {
        mavenFabric(MavenPublication) {
            artifactId = rootProject.archivesBaseName + "-fabric"
            from components.java
        }
    }

    repositories {
        if (System.getenv("MAVEN_PASS") != null) {
            maven {
                url = "https://deploy.shedaniel.me/"
                credentials {
                    username = "shedaniel"
                    password = System.getenv("MAVEN_PASS")
                }
            }
        }
    }
}

unifiedPublishing {
    project {
        displayName = "[Fabric $rootProject.supported_version] v$project.version"
        releaseType = "$rootProject.artifact_type"
        changelog = releaseChangelog()
        gameVersions = []
        gameLoaders = ["fabric", "quilt"]
        mainPublication renameJarForPublication
        relations {
            depends {
                curseforge = "fabric-api"
                modrinth = "fabric-api"
            }
        }

        var CURSE_API_KEY = project.findProperty("CURSE_API_KEY") ?: System.getenv("CURSE_API_KEY")
        if (CURSE_API_KEY != null) {
            curseforge {
                token = CURSE_API_KEY
                id = rootProject.curseforge_id
                gameVersions.addAll "Java 17", project.minecraft_version
            }
        }

        var MODRINTH_TOKEN = project.findProperty("MODRINTH_TOKEN") ?: System.getenv("MODRINTH_TOKEN")
        if (MODRINTH_TOKEN != null) {
            modrinth {
                token = MODRINTH_TOKEN
                id = rootProject.modrinth_id
                version = "$project.version+$project.name"
                gameVersions.addAll project.minecraft_version
            }
        }
    }
}
