def loadProperties() {
    def props = new Properties()
    def file = new File("gradle.properties")
    file.withInputStream {
        props.load(it)
    }
    return props
}


def writeProperties(props) {
    props.store(new File("gradle.properties").newWriter(), null)
}

def setVersion() {
    def newVersion = System.getProperty("newVersion")

    if(!newVersion) {
        newVersion = "${System.getenv("CURRENT_MAJOR_VERSION")}.${System.getenv("CURRENT_MINOR_VERSION")}.${System.getenv("BUILD_NUMBER")}"
        if(System.getProperty("zephyrRelease")) {
            newVersion += ".Final"
        } else {
            newVersion += "-SNAPSHOT"
        }
    }
    if(newVersion) {
        println("Setting version from $project.version to $newVersion")
        def props = loadProperties()
        props.version = newVersion.toString()
        writeProperties(props)
        println("successfully updated project version $project.version to $newVersion")

    } else {
        logger.warn("No new version passed in.  Not doing anything")
    }

}
project.tasks.register("setVersion") {
    doLast {
        setVersion()
    }
}


task populateVersions(type: Copy) {
    from "${project.projectDir}/src/main/resources/templates/Versions.java"
    into "${buildDir}/generated/sources/main/java/io.sunshower.aire.ux.controls"

    def properties = new Properties()
    file("gradle.properties").withInputStream {
        properties.load(it)
    }
    def devMode = findProperty('development') != null
    if (devMode) {
        properties.replaceAll((k, v) -> {
            def sv = String.valueOf(v)
            return sv.contains("-SNAPSHOT") ? sv.replaceAll("-SNAPSHOT", "") : sv
        })
    }
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: properties)
}


task populatePaths(type: Copy) {
    from "$project.projectDir/src/main/resources/templates/Paths.java"
    into "$buildDir/generated/sources/main/java/io.sunshower.aire.ux.controls"

    def devMode = findProperty('development') != null
    def properties = new Properties()
    def modeString = devMode ? "development" : "production";
    file("${project.projectDir}/src/main/resources/paths.$modeString").withInputStream {
        properties.load(it)
    }
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: properties)
}


task populate(dependsOn:['populatePaths', 'populateVersions']){
    group = "development"
}

compileJava.dependsOn populate
compileJava.mustRunAfter populate




task linkSelf(type: NpmTask) {
    group = 'development'
    args = ['run', 'link']
}

task watch(type: NpmTask, dependsOn: 'linkSelf') {
    group = 'development'
    args = ['run', 'develop']
}

task buildResources(type: NpmTask) {
    group = 'development'
    args = ['run', 'build']
}

task develop() {
    group = 'development'
    dependsOn(
            'nodeSetup',
            'buildResources',
            'build',
            'runDevelopment'
    )
}