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

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"

	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 {
		mavenLocal()
		maven {
			url "https://maven.architectury.dev/"
			content {
				includeGroup "dev.architectury"
			}
		}

		maven {
			url "https://maven.ftb.dev/releases"
			content {
				includeGroup "dev.ftb.mods"
			}
		}
		maven {
			url "https://maven.ftb.dev/snapshots"
			content {
				includeGroup "dev.ftb.mods"
			}
		}
	}

	java {
		withSourcesJar()
	}

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

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')
		requires('ftb-library-fabric')
		requires('ftb-teams-fabric')
		optional('ftb-ranks-fabric')
	}

	curseforge("curseforgeNeoForge") {
		from(curseForgeOptions, neoForgeOptions)
		projectId = curseforge_id_forge
		requires('architectury-api')
		requires('ftb-library-forge')
		requires('ftb-teams-forge')
		optional('ftb-ranks-forge')
	}

//	curseforge("curseforgeForge") {
//		from(curseForgeOptions, forgeOptions)
//		projectId = curseforge_id_forge
//		requires('architectury-api')
//		requires('ftb-library-forge')
//		requires('ftb-teams-forge')
//		optional('ftb-ranks-forge')
//	}
}
