import java.util.concurrent.Callable

apply plugin: 'io.spring.convention.spring-module'

dependencies {
	management platform(project(":spring-security-dependencies"))
	api project(':spring-security-crypto')
	api 'org.springframework:spring-aop'
	api 'org.springframework:spring-beans'
	api 'org.springframework:spring-context'
	api 'org.springframework:spring-core'
	api 'org.springframework:spring-expression'

	optional 'com.fasterxml.jackson.core:jackson-databind'
	optional 'io.projectreactor:reactor-core'
	optional 'jakarta.annotation:jakarta.annotation-api'
	optional 'org.aspectj:aspectjrt'
	optional 'org.springframework:spring-jdbc'
	optional 'org.springframework:spring-tx'
	optional 'org.jetbrains.kotlinx:kotlinx-coroutines-reactor'

	testImplementation 'commons-collections:commons-collections'
	testImplementation 'io.projectreactor:reactor-test'
	testImplementation "org.assertj:assertj-core"
	testImplementation "org.junit.jupiter:junit-jupiter-api"
	testImplementation "org.junit.jupiter:junit-jupiter-params"
	testImplementation "org.junit.jupiter:junit-jupiter-engine"
	testImplementation "org.mockito:mockito-core"
	testImplementation 'org.mockito:mockito-inline'
	testImplementation "org.mockito:mockito-junit-jupiter"
	testImplementation "org.springframework:spring-test"
	testImplementation 'org.skyscreamer:jsonassert'
	testImplementation 'org.springframework:spring-test'

	testRuntimeOnly 'org.hsqldb:hsqldb'
}

task springVersion(type: org.gradle.api.tasks.WriteProperties) {
	outputFile = file("${buildDir}/versions/spring-security.versions")
	property("org.springframework:spring-core", springVersion())
}

tasks.processResources {
	into('META-INF') {
		from project.tasks.springVersion.outputs
	}
}

configure(project.tasks.withType(Test)) {
	doFirst {
		systemProperties['springSecurityVersion'] = version
		systemProperties['springVersion'] = springVersion().call()
	}
}

Callable<String> springVersion() {
	return  (Callable<String>) { project.configurations.compileClasspath.resolvedConfiguration.resolvedArtifacts
    .find { it.name == 'spring-core' }.moduleVersion.id.version }
}
