buildscript {
	dependencies {
		classpath "org.kohsuke:github-api:1.323"
	}
}

plugins {
	id "fabric-loom" version "1.7-SNAPSHOT"
	id "com.diffplug.spotless" version "6.25.0"
}

def ENV = System.getenv()

version = project.mod_version
group = project.maven_group

base {
	archivesName = project.archives_base_name
}

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.
}

dependencies {
	// To change the versions see the gradle.properties file
	minecraft "com.mojang:minecraft:${project.minecraft_version}"
	mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
	modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
	
	// Fabric API. This is technically optional, but you probably want it anyway.
	modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
	
	// net.wurstclient.ai.PathPos extends net.minecraft.util.math.BlockPos,
	// which uses javax.annotation.concurrent.Immutable, which is part of
	// the JSR305 library.
	//
	// In other words, Wurst won't compile without this library,
	// even though it's Minecraft that actually uses it.
	modImplementation "com.google.code.findbugs:jsr305:3.0.2"
}

loom {
	accessWidenerPath = file("src/main/resources/wurst.accesswidener")
}

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

tasks.withType(JavaCompile).configureEach {
	// Minecraft 1.20.5 (24w14a) upwards uses Java 21.
	it.options.release = 21
}

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()
	
	sourceCompatibility = JavaVersion.VERSION_21
	targetCompatibility = JavaVersion.VERSION_21
}

jar {
	from("LICENSE") {
		rename {"${it}_${project.base.archivesName.get()}"}
	}
}

spotless {
	lineEndings("WINDOWS")
	java {
		removeUnusedImports()
		indentWithTabs()
		trimTrailingWhitespace()
		eclipse().configFile(file("codestyle/formatter.xml"))
	}
	json {
		target "src/**/*.json"
		gson().indentWithSpaces(2).version("2.10.1")
	}
}

task moveDevLibs(dependsOn: [remapJar, remapSourcesJar]) {
	doLast {
		def archivesName = project.base.archivesName.get() as String
		ant.move(file:"${project.buildDir}/devlibs/${archivesName}-${version}-dev.jar", tofile:"${project.buildDir}/libs/${archivesName}-${version}-dev.jar")
		ant.move(file:"${project.buildDir}/devlibs/${archivesName}-${version}-sources.jar", tofile:"${project.buildDir}/libs/${archivesName}-${version}-sources-dev.jar")
	}
}

import org.kohsuke.github.GHReleaseBuilder
import org.kohsuke.github.GitHub

task github(dependsOn: moveDevLibs) {
	onlyIf {
		ENV.GITHUB_TOKEN
	}
	
	doLast {
		def github = GitHub.connectUsingOAuth(ENV.GITHUB_TOKEN as String)
		def repository = github.getRepository("Wurst-Imperium/Wurst-MCX2")
		def ghVersion = version.substring(0, version.indexOf("-"))
		def archivesName = project.base.archivesName.get() as String
		
		def ghRelease = repository.getReleaseByTagName(ghVersion as String)
		if(ghRelease == null) {
			def releaseBuilder = new GHReleaseBuilder(repository, ghVersion as String)
			releaseBuilder.prerelease(ghVersion.contains("pre"))
			ghRelease = releaseBuilder.create()
		}
		
		ghRelease.uploadAsset(remapJar.archiveFile.get().getAsFile(), "application/java-archive")
		ghRelease.uploadAsset(remapSourcesJar.archiveFile.get().getAsFile(), "application/java-archive")
		ghRelease.uploadAsset(new File("${project.buildDir}/libs/${archivesName}-${version}-dev.jar"), "application/java-archive")
		ghRelease.uploadAsset(new File("${project.buildDir}/libs/${archivesName}-${version}-sources-dev.jar"), "application/java-archive")
	}
}
