// SPDX-FileCopyrightText: 2021 Paul Schaub <vanitasvitae@fsfe.org>
//
// SPDX-License-Identifier: Apache-2.0

plugins {
    id 'application'
    id "com.github.johnrengelman.shadow" version "6.1.0"
}
def generatedVersionDir = "${buildDir}/generated-version"

sourceSets {
    main {
        output.dir(generatedVersionDir, builtBy: 'generateVersionProperties')
    }
}

task generateVersionProperties {
    doLast {
        def propertiesFile = file "$generatedVersionDir/version.properties"
        propertiesFile.parentFile.mkdirs()
        propertiesFile.createNewFile()
        // Instead of using a Properties object here, we directly write to the file
        //  since Properties adds a timestamp, ruining reproducibility
        propertiesFile.write("version="+rootProject.version.toString())
    }
}
processResources.dependsOn generateVersionProperties

dependencies {

    testImplementation(project(":pgpainless-core"))

    testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
    // https://todd.ginsberg.com/post/testing-system-exit/
    testImplementation 'com.ginsberg:junit5-system-exit:1.1.2'

    // implementation "ch.qos.logback:logback-core:1.2.6"
    // We want logback logging in tests and in the app
    testImplementation "ch.qos.logback:logback-classic:$logbackVersion"
    implementation "ch.qos.logback:logback-classic:$logbackVersion"

    implementation(project(":pgpainless-sop"))
    implementation "org.pgpainless:sop-java-picocli:$sopJavaVersion"

    // https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305
    implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'
}

mainClassName = 'org.pgpainless.cli.PGPainlessCLI'

application {
    mainClass = mainClassName
}
/**
jar {
    duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
    manifest {
        attributes 'Main-Class': "$mainClassName"
    }

    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    } {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
}
 */

run {
    // https://stackoverflow.com/questions/59445306/pipe-into-gradle-run
    standardInput = System.in
    // https://discuss.gradle.org/t/how-can-i-provide-command-line-args-to-application-started-with-gradle-run/6474/5
    if (project.hasProperty("appArgs")) {
        args Eval.me(appArgs)
    }
}

// tasks."jar".dependsOn(":pgpainless-core:assemble", ":pgpainless-sop:assemble")