apply plugin: "idea"
apply plugin: "eclipse"
apply plugin: "java"
apply plugin: "com.diffplug.spotless"

group = "com.tribufu"
version = "1.3.0"

buildscript {
    repositories {
        mavenCentral()
        maven { url = "https://mvn.tribufu.com/releases" }
    }

    dependencies {
        classpath "com.android.tools.build:gradle:2.3.+"
        classpath "com.diffplug.spotless:spotless-plugin-gradle:6.11.0"
        classpath "com.github.dcendents:android-maven-gradle-plugin:2.1"
    }
}

repositories {
    mavenCentral()
    maven { url = "https://mvn.tribufu.com/releases" }
}

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

if(hasProperty("target") && target == "android") {
    apply plugin: "com.android.library"
    apply plugin: "com.github.dcendents.android-maven"

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.2"

        defaultConfig {
            minSdkVersion 14
            targetSdkVersion 25
        }

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }

        libraryVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith(".aar")) {
                    def fileName = "${project.name}-${variant.baseName}-${version}.aar"
                    output.outputFile = new File(outputFile.parent, fileName)
                }
            }
        }

        dependencies {
            provided "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version"
        }
    }

    afterEvaluate {
        android.libraryVariants.all { variant ->
            def task = project.tasks.create "jar${variant.name.capitalize()}", Jar
            task.description = "Create jar artifact for ${variant.name}"
            task.dependsOn variant.javaCompile
            task.from variant.javaCompile.destinationDirectory
            task.destinationDirectory = project.file("${project.buildDir}/outputs/jar")
            task.archiveFileName = "${project.name}-${variant.baseName}-${version}.jar"
            artifacts.add("archives", task)
        }
    }

    task sourcesJar(type: Jar) {
        from android.sourceSets.main.java.srcDirs
        classifier = "sources"
    }

    artifacts {
        archives sourcesJar
    }
} else {
    apply plugin: "java"
    apply plugin: "maven-publish"

    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8

    publishing {
        publications {
            maven(MavenPublication) {
               artifactId = "tribufu"
               from components.java
            }
        }
    }

    task execute(type:JavaExec) {
       main = System.getProperty("mainClass")
       classpath = sourceSets.main.runtimeClasspath
    }
}

ext {
    jakarta_annotation_version = "1.3.5"
}

dependencies {
    implementation "com.google.code.findbugs:jsr305:3.0.2"
    implementation "com.google.code.gson:gson:2.9.1"
    implementation "com.squareup.okhttp3:logging-interceptor:4.12.0"
    implementation "com.squareup.okhttp3:okhttp:4.12.0"
    implementation "io.gsonfire:gson-fire:1.9.0"
    implementation "io.swagger:swagger-annotations:1.6.8"
    implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version"
    implementation "jakarta.ws.rs:jakarta.ws.rs-api:2.1.6"
    implementation "org.openapitools:jackson-databind-nullable:0.2.6"
    implementation group: "org.apache.commons", name: "commons-lang3", version: "3.17.0"
    testImplementation "org.junit.jupiter:junit-jupiter-api:5.10.3"
    testImplementation "org.mockito:mockito-core:3.12.4"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.10.3"
}

javadoc {
    options.tags = [ "http.response.details:a:Http Response Details" ]
}

spotless {
    enforceCheck false

    format "misc", {
        target ".gitignore"
        trimTrailingWhitespace()
        indentWithSpaces()
        endWithNewline()
    }

    java {
        googleJavaFormat("1.8").aosp().reflowLongStrings()
        removeUnusedImports()
        importOrder()
    }
}

test {
    useJUnitPlatform()

    dependsOn "cleanTest"

    testLogging {
        events "passed", "skipped", "failed"
    }
}
