import java.nio.file.Path
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

gradle.allprojects {
    ext.getCurrentVersion = {
        ->
        def stdout = new ByteArrayOutputStream()
        String tagIsh
        try {
            exec {
                commandLine 'git', 'describe', '--tags', "--match=v*"
                standardOutput = stdout
            }
            tagIsh = stdout.toString().trim().toLowerCase()
        } catch (Exception e) {
            tagIsh = "dev-Unknown"
        }

        // Dev tags: v2021.1.6-3-gf922466d
        // We're specifically looking to capture the middle -3-
        boolean isDev = tagIsh.matches(".*-[0-9]*-g[0-9a-f]*")
        if (isDev && !tagIsh.startsWith("dev-")) tagIsh = "dev-" + tagIsh
        println("Picked up version: " + tagIsh)
        return tagIsh
    }

    if (!ext.has("versionString")) {
        ext.versionString = getCurrentVersion()
    }

    ext.writePhotonVersionFile = {File versionFileIn, Path path, String version ->
        println("Writing " + version + " to " + path.toAbsolutePath().toString())
        String date = DateTimeFormatter.ofPattern("yyyy-M-d hh:mm:ss").format(LocalDateTime.now())
        File versionFileOut = new File(path.toAbsolutePath().toString())
        versionFileOut.delete()
        def read = versionFileIn.text.replace('${version}', version).replace('${date}', date)
        if (!versionFileOut.parentFile.exists()) versionFileOut.parentFile.mkdirs()
        if (!versionFileOut.exists()) versionFileOut.createNewFile()
        versionFileOut.write(read)
    }
}
