/*****************************************************************
 *   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
 *
 *    https://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.
 ****************************************************************/
buildscript {
    dependencies {
        classpath 'org.apache.velocity:velocity-engine-core:2.4.1'
    }
}

import org.apache.velocity.VelocityContext
import org.apache.velocity.app.VelocityEngine

plugins {
    id 'java-gradle-plugin'
    id 'java'
}

java {
    sourceCompatibility = JavaVersion.VERSION_11
}

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    implementation gradleApi()
    implementation localGroovy()
}

def projectVersion = getProjectVersion()

group 'org.apache.cayenne.plugins'
version projectVersion
def cayenneVersion = version

def getProjectVersion() {
    def pomFile = file('pom.xml')
    if (pomFile.file) {
        def pom = new XmlSlurper().parseText(file('pom.xml').text)
        def pomVersion = pom.parent.version
        return pomVersion
    }
}

def classpathFile = file('build/classpath.txt')
if (classpathFile.file) {
    String[] paths = classpathFile.text.split(';')
    dependencies {
        add 'implementation', files(paths)
    }
}

// Create file with cayenne-gradle-plugin version
task versionFile {
    def resourceOutputDir = file("$buildDir/resources/main/")
    doFirst {
        resourceOutputDir.exists() || resourceOutputDir.mkdirs()
        // file name must be in sync with GradleCayenneExtension
        def file = file("$buildDir/resources/main/cayenne.version")
        file.write(cayenneVersion.toString())
    }
}

def processLicenseFile(fileName) {
    def context = new VelocityContext(Map.of("binary", false))
    def outputWriter = new FileWriter(new File("$buildDir/resources/main/META-INF/cayenne/${fileName}.txt"))
    def template
    def templateFile = new File("$buildDir/resources/tpl/META-INF/cayenne/${fileName}.txt.vm");
    if(templateFile.exists()) {
        template = templateFile.text
    } else {
        throw new RuntimeException("Template file `$buildDir/resources/tpl/META-INF/cayenne/${fileName}.txt.vm` doesn't exist")
    }

    try {
        new VelocityEngine().evaluate(context, outputWriter, fileName, template)
        outputWriter.flush()
    } finally {
        outputWriter.close()
    }
}

// Copy license and notice files
task licenseFiles(type: Copy) {
    from '../build-tools/cayenne-legal/src/main/resources/'
    into "$buildDir/resources/tpl/"
    doLast {
        mkdir("$buildDir/resources/main/META-INF/cayenne/")
        processLicenseFile("LICENSE")
        processLicenseFile("NOTICE")
    }
}

task sourcesJar(type: Jar, dependsOn: classes) {
    archiveClassifier = 'sources'
    from sourceSets.main.allSource
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    archiveClassifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives sourcesJar
    archives javadocJar
}

processResources.dependsOn licenseFiles
processResources.dependsOn versionFile