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

gradle.allprojects {
    ext.getCurrentVersion = { ->
        def stdout = new ByteArrayOutputStream()
        String tagIsh
        try {
            exec {
                commandLine 'git', 'describe', '--tags'
                standardOutput = stdout
            }
            tagIsh = stdout.toString().trim().toLowerCase()
        } catch(Exception e) {
            tagIsh = "dev-Unknown"
        }
        println("Picked up version: " + tagIsh)
        return tagIsh
    }
    ext.versionString = getCurrentVersion()
}

task writeCurrentVersionJava {
    String date = DateTimeFormatter.ofPattern("yyyy-M-d hh:mm:ss").format(LocalDateTime.now())
    File versionFile = new File(Path.of("$projectDir", "src", "main", "java", "org", "photonvision", "PhotonVersion.java")
            .toAbsolutePath().toString())
    versionFile.delete()
    boolean success = versionFile.createNewFile()
    versionFile << "package org.photonvision;\n" +
            "\n" +
            "/*\n" +
            " * Autogenerated file! Do not manually edit this file. This version is regenerated\n" +
            " * any time the publish task is run, or when this file is deleted.\n" +
            " */\n" +
            "\n" +
            "@SuppressWarnings(\"ALL\")\n" +
            "public final class PhotonVersion {\n" +
            "    public static final String versionString = \"${versionString}\";\n" +
            "    public static final String buildDate = \"${date}\";\n" +
            "    public static final boolean isRelease = !versionString.startsWith(\"dev\");\n" +
            "}"
}

build.dependsOn writeCurrentVersionJava