buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        //
    }
}

plugins {
//    id "com.github.hierynomus.license" version "0.13.1"
    id 'maven-publish'
    id 'net.nemerosa.versioning' version '2.4.0'
    id 'com.jfrog.bintray' version '1.8.4'
    id 'com.github.ben-manes.versions' version '0.13.0'

    // jigsaw:
//    id 'org.gradle.java.experimental-jigsaw' version '0.1.1'
}

apply plugin: 'java'
apply from: 'gradle/publishing.gradle'

wrapper {
    gradleVersion = '5.4'
}

sourceCompatibility = '1.11'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
}

// javadoc is way too strict for my taste.
if (JavaVersion.current().isJava8Compatible()) {
    allprojects {
        tasks.withType(Javadoc) {
            options.addStringOption("encoding", "UTF-8")
            options.addStringOption('Xdoclint:none', '-quiet')
        }
    }
}

if (!hasProperty('mainClass')) {
    ext.mainClass = 'eu.mihosoft.freerouting.gui.MainApplication'
}

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.10'

    // https://mvnrepository.com/artifact/javax.help/javahelp
    compile group: 'javax.help', name: 'javahelp', version: '2.0.05'

//    compile files("./lib/eu.mihosoft.freerouting.deps.jh.jar")

    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.0'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.0'
}

// ext.moduleName = 'eu.mihosoft.freerouting'
// javaModule.name = 'eu.mihosoft.freerouting'
//
//compileJava {
//    inputs.property("moduleName", moduleName)
//    doFirst {
//
//        System.err.println(": modulepath-jar: " + classpath.asPath)
//
//        options.compilerArgs = [
//            '--module-path', classpath.asPath,
//        ]
//        classpath = files()
//    }
//}

Date buildTimeAndDate = new Date()
ext {
    buildDate = new java.text.SimpleDateFormat('yyyy-MM-dd').format(buildTimeAndDate)
    buildTime = new java.text.SimpleDateFormat('HH:mm:ss.SSSZ').format(buildTimeAndDate)
}

// create a fat-jar (class files plus dependencies
// excludes VRL.jar (plugin jar files must not start with 'vrl-\\d+')
jar {


    // TODO add switch for fat-jar generation
    // dependencies except VRL
    // from configurations.runtime.asFileTree.
    //     filter({file->return !file.name.startsWith("vrl-0")}).
    //     files.collect { zipTree(it) }
    //
//    from configurations.runtime.asFileTree.files.collect { zipTree(it) }

    // // project class files compiled from source
    // from files(sourceSets.main.output)

    manifest {

        attributes(
                'Built-By': System.properties['user.name'],
                'Created-By': System.properties['java.version'] + " (" + System.properties['java.vendor'] + " " + System.properties['java.vm.version'] + ")",
                'Build-Date': project.buildDate,
                'Build-Time': project.buildTime,
                'Build-Revision': versioning.info.commit,
                'Specification-Title': project.name,
                'Specification-Version': project.version,
                'Implementation-Title': project.name,
                'Implementation-Version': project.version
//                ,'Main-Class': mainClass
        )
    }
}

task executableJar(type: Jar) {
    classifier = 'executable'

    from configurations.runtime.asFileTree.files.collect { zipTree(it) }

    from files(sourceSets.main.output)

    manifest {

        attributes(
                'Built-By': System.properties['user.name'],
                'Created-By': System.properties['java.version'] + " (" + System.properties['java.vendor'] + " " + System.properties['java.vm.version'] + ")",
                'Build-Date': project.buildDate,
                'Build-Time': project.buildTime,
                'Build-Revision': versioning.info.commit,
                'Specification-Title': project.name,
                'Specification-Version': project.version,
                'Implementation-Title': project.name,
                'Implementation-Version': project.version,
                'Main-Class': mainClass
        )
    }
}

artifacts {
    archives executableJar
}


//license {
//    header = rootProject.file('config/HEADER')
//    strictCheck = true
//    ignoreFailures = true
//    mapping {
//        java   = 'SLASHSTAR_STYLE'
//        groovy = 'SLASHSTAR_STYLE'
//        fxml   = 'XML_STYLE'
//    }
//    ext.yearSince1   = '2017'
//    ext.yearCurrent  = new java.text.SimpleDateFormat("yyyy").format(new Date())
//    ext.author1 = 'Michael Hoffer <info@michaelhoffer.de>'
//    exclude '**/*.svg'
//}

task run(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath

    main = mainClass

    // arguments to pass to the application
    //    args 'appArg1'
    // jvmArgs 'arg1'
}

