plugins {
	id 'java-library'
	id "com.vanniktech.maven.publish.base" version "0.30.0"
	id 'com.google.osdetector' version '1.7.3'
}

group = 'mp.code'
version = '0.8.2'

tasks.register('windowsJar', Jar) {
	outputs.upToDateWhen { false }
	archiveClassifier = 'windows-x86_64'
	from sourceSets.main.runtimeClasspath
	from('artifacts') {
		include('*.dll')
		into('natives/')
	}
	doFirst {
		if(!(new File('artifacts/codemp.dll').exists())) {
			throw new GradleException("The required file does not exist!")
		}
	}
}

tasks.register('macosJar', Jar) {
	outputs.upToDateWhen { false }
	archiveClassifier = 'osx-aarch_64'
	from sourceSets.main.runtimeClasspath
	from('artifacts') {
		include('*.dylib')
		into('natives/')
	}
	doFirst {
		if(!(new File('artifacts/libcodemp.dylib').exists())) {
			throw new GradleException("The required file does not exist!")
		}
	}
}

tasks.register('linuxJar', Jar) {
	outputs.upToDateWhen { false }
	archiveClassifier = 'linux-x86_64'
	from sourceSets.main.runtimeClasspath
	from('artifacts') {
		include('*.so')
		into('natives/')
	}
	doFirst {
		if(!(new File('artifacts/libcodemp.so').exists())) {
			throw new GradleException("The required file does not exist! Maybe you need to `cargo build` the main library first?")
		}
	}
}

tasks.register('multiplatformJar', Jar) {
	outputs.upToDateWhen { false }
	archiveClassifier = 'all'
	from sourceSets.main.runtimeClasspath
	from('artifacts') {
		include('*')
		into('natives/')
	}
}

configurations {
	windowsJar {
		canBeConsumed = true
		canBeResolved = false
		extendsFrom implementation, runtimeOnly
	}
	linuxJar {
		canBeConsumed = true
		canBeResolved = false
		extendsFrom implementation, runtimeOnly
	}
	macosJar {
		canBeConsumed = true
		canBeResolved = false
		extendsFrom implementation, runtimeOnly
	}
	multiplatformJar {
		canBeConsumed = true
		canBeResolved = false
		extendsFrom implementation, runtimeOnly
	}
}

java {
	sourceCompatibility = targetCompatibility = JavaVersion.VERSION_11
	withSourcesJar()
	withJavadocJar()
}

artifacts {
	archives jar
	archives sourcesJar
	archives javadocJar
	windowsJar(windowsJar)
	macosJar(macosJar)
	linuxJar(linuxJar)
	multiplatformJar(multiplatformJar)
}

repositories {
	mavenCentral()
}

sourceSets {
	main.java.srcDirs = ['src/']
}

dependencies {
	compileOnly 'org.projectlombok:lombok:1.18.34'
	annotationProcessor 'org.projectlombok:lombok:1.18.34'
}

tasks.register('cargoBuild', Exec) {
	workingDir '.'
	commandLine 'cargo', 'build', '--release', '--features=java'
}

def rustDir = projectDir.toPath()
	.parent
	.parent
	.resolve('target')
	.resolve('release')
	.toFile()

tasks.register('nativeBuild', Jar) {
	archiveClassifier = osdetector.classifier
	dependsOn cargoBuild
	from sourceSets.main.runtimeClasspath
	from(rustDir) {
		include('*.dll')
		include('*.so')
		include('*dylib')
		into('natives/')
	}
}

publishing {
	publications {
		mavenJava(MavenPublication) {
			artifact jar
			artifact sourcesJar
			artifact javadocJar
			artifact windowsJar
			artifact linuxJar
			artifact macosJar
			artifact multiplatformJar
		}
	}
}

import com.vanniktech.maven.publish.SonatypeHost
mavenPublishing {
	publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL, true) 
	signAllPublications()
	coordinates(project.group, rootProject.name, project.version)

	pom {
		name = rootProject.name
		description = "A collaborative editor plugin ecosystem"
		inceptionYear = "2022"
		url = "https://code.mp/"
		licenses {
			license {
				name = "The GNU General Public License v3.0"
				url = "https://www.gnu.org/licenses/gpl-3.0.txt"
			}
		}
		developers {
			developer {
				id = "zaaarf"
				name = "zaaarf"
				email = "zaaarf@codemp.dev"
			}
		}
		scm {
			url = "https://github.com/hexedtech/codemp/"
			connection = "scm:git:git://github.com/hexedtech/codemp.git"
			developerConnection = "scm:git:ssh://git@github.com/hexedtech/codemp.git"
		}
	}
}