plugins {
    id "architectury-plugin" version "3.4-SNAPSHOT"
    id "dev.architectury.loom" version "1.10-SNAPSHOT" apply false
    id "me.modmuss50.mod-publish-plugin" version "0.8.4"
}

apply from: 'https://raw.githubusercontent.com/FTBTeam/mods-meta/main/gradle/changelog.gradle'

architectury {
    minecraft = rootProject.minecraft_version
}

subprojects {
    apply plugin: "dev.architectury.loom"

    loom {
        silentMojangMappingsLicense()
    }

    dependencies {
        minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
        mappings loom.officialMojangMappings()
    }
}

allprojects {
    apply plugin: "java"
    apply plugin: "architectury-plugin"
    apply plugin: "maven-publish"
    apply from: "https://raw.githubusercontent.com/FTBTeam/mods-meta/main/gradle/git-md-changelog.gradle"

    version = project.mod_version
    group = project.maven_group
    archivesBaseName = project.archives_base_name

    // needs to be done AFTER version is set
    apply from: "https://raw.githubusercontent.com/FTBTeam/mods-meta/main/gradle/publishing.gradle"

    sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = 21

    compileJava {
        options.encoding = "UTF-8"
    }

    repositories {
        mavenCentral()
        mavenLocal()

        maven {
            url "https://maven.architectury.dev/"
        }

        maven {
            url "https://www.cursemaven.com"
            content {
                includeGroup "curse.maven"
            }
        }

        maven {
            url "https://maven.saps.dev/minecraft"
            content {
                includeGroup "dev.latvian.mods"
                includeGroup "dev.ftb.mods"
            }
        }

        maven {
            name "ModMaven (JEI)"
            url "https://modmaven.dev/"
            content {
                includeGroup "mezz.jei"
            }
        }

        maven {
            // Emi
            name = "TerraformersMC"
            url = "https://maven.terraformersmc.com/"
        }
    }

    dependencies {
        testImplementation 'org.junit.jupiter:junit-jupiter:5.11.0-M1'
    }

    java {
        withSourcesJar()
    }

    publishing {
        repositories {
            if (ftbPublishing.ftbToken) {
                maven {
                    url ftbPublishing.ftbURL
                    credentials {
                        username = ftbPublishing.ftbUser
                        password = ftbPublishing.ftbToken
                    }
                }
            }

            if (ftbPublishing.sapsToken) {
                maven {
                    url ftbPublishing.sapsURL
                    credentials {
                        username = ftbPublishing.sapsUser
                        password = ftbPublishing.sapsToken
                    }
                }
            }
        }
    }
}

publishMods {
    dryRun = providers.environmentVariable("CURSEFORGE_KEY").getOrNull() == null
    changelog = createChangelog(project)
    version = mod_version

    // TODO: Migrate to something else
    def tag = providers.environmentVariable("TAG").getOrElse("release")
    type = tag.endsWith("-beta") ? BETA : (tag.endsWith("-alpha") ? ALPHA : STABLE)

    def createOptions = (String projectName) -> {
        publishOptions {
            file = project.provider { project(":$projectName").tasks.remapJar }.flatMap { it.archiveFile }
            displayName = "[${projectName.toUpperCase()}][${minecraft_version}] ${readable_name} ${mod_version}"
            modLoaders.add(projectName.toLowerCase())
        }
    }

    def fabricOptions = createOptions("fabric")
    def neoForgeOptions = createOptions("neoforge")
//	def forgeOptions = createOptions("forge")

    def curseForgeOptions = curseforgeOptions {
        accessToken = providers.environmentVariable("CURSEFORGE_KEY")
        minecraftVersions.add("${minecraft_version}")
        javaVersions.add(JavaVersion.VERSION_21)
    }

    curseforge("curseforgeFabric") {
        from(curseForgeOptions, fabricOptions)
        projectId = curseforge_id_fabric
        requires('architectury-api')
        requires('fabric-api')
        optional('jei')
        optional('roughly-enough-items')
    }

    curseforge("curseforgeNeoForge") {
        from(curseForgeOptions, neoForgeOptions)
        projectId = curseforge_id_forge
        requires("architectury-api")
        optional('jei')
        optional('roughly-enough-items')
    }

//	curseforge("curseforgeForge") {
//		from(curseForgeOptions, forgeOptions)
//		projectId = curseforge_id_forge
//		requires("architectury-api")
//		optional('jei')
//		optional('roughly-enough-items')
//	}
}
