/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

plugins {
    `java-library`
    id("airflow-jvm-conventions")
    id("airflow-publish")
}

val slf4jVersion: String by project

abstract class GenerateConstants : DefaultTask() {
    @get:Input
    abstract val requestedSlf4jApiVersion: Property<String>

    @get:OutputDirectory
    abstract val outputDir: DirectoryProperty

    @TaskAction
    fun generate() =
        outputDir.get().file("org/apache/airflow/sdk/slf4j/Constants.kt").asFile.apply {
            parentFile.mkdirs()
            writeText(
                """
                // Generated by Gradle — do not edit.
                package org.apache.airflow.sdk.slf4j

                internal const val REQUESTED_SLF4J_API_VERSION = "${requestedSlf4jApiVersion.get()}"
                """.trimIndent() + "\n",
            )
        }
}

val generateSlf4jApiVersion by tasks.registering(GenerateConstants::class) {
    description = "Generate source for constants pulled from Gradle properties."
    requestedSlf4jApiVersion = slf4jVersion
    outputDir = layout.buildDirectory.dir("generated/sources/slf4jApiVersion/kotlin/main")
}

kotlin.sourceSets.main {
    kotlin.srcDir(generateSlf4jApiVersion.map { it.outputs.files.singleFile })
}

dependencies {
    api("org.slf4j:slf4j-api:$slf4jVersion")
    implementation(project(":sdk"))
    testImplementation(kotlin("test"))
    testImplementation(testFixtures(project(":sdk")))
}

java {
    withSourcesJar() // Required by Maven Central.
}

tasks.withType<Test> {
    useJUnitPlatform()
}

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            artifactId = "airflow-sdk-slf4j"
            from(components["java"])
            pom {
                name = "Apache Airflow Java SDK SLF4J Provider"
                description = "SLF4J logging provider for the Apache Airflow Java SDK. " +
                    "Routes SLF4J log calls from task code through the SDK to Airflow's task log store."
            }
        }
    }
}
