import java.text.SimpleDateFormat

buildscript {
    configurations.classpath {
        resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
    }
}

plugins {
    id "architectury-plugin" version "3.4-SNAPSHOT"
    id "dev.architectury.loom" version "1.4-SNAPSHOT" apply false
    id "org.cadixdev.licenser" version "0.6.1"
    id "me.shedaniel.unified-publishing" version "0.1.+" apply false
    id "maven-publish"
}

architectury {
    minecraft = rootProject.minecraft_version
}

subprojects {
    apply plugin: "dev.architectury.loom"

    loom {
        silentMojangMappingsLicense()
    }

    dependencies {
        minecraft "com.mojang:minecraft:${rootProject.architectury.minecraft}"
        mappings loom.officialMojangMappings()
    }

    repositories {
        maven { url "https://maven.neoforged.net/releases/" }
    }
}

allprojects {
    apply plugin: "java"
    apply plugin: "architectury-plugin"
    apply plugin: "org.cadixdev.licenser"

    ext {
        isSnapshot = System.getenv("PR_NUM") != null
    }

    def runNumber = (System.getenv("GITHUB_RUN_NUMBER") == null ? "9999" : System.getenv("GITHUB_RUN_NUMBER"))

    if (!ext.isSnapshot) {
        version = rootProject.base_version + "." + runNumber
        archivesBaseName = rootProject.archives_base_name
    } else {
        version = rootProject.base_version + "-PR." + System.getenv("PR_NUM") + "." + runNumber
        archivesBaseName = rootProject.archives_base_name_snapshot
    }

    group = rootProject.maven_group

    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
        options.release = 17
    }

    javadoc {
        // Architectury's common javadoc has references to platform code, which cannot be resolved normally.
        // Let's just skip the errors!
        failOnError = false
    }

    license {
        header = rootProject.file("HEADER")

        ext {
            name = "architectury"
            year = "2020, 2021, 2022"
        }

        include "**/*.java"
        exclude "**/NbtType.java"

        ignoreFailures = true
    }

    ext {
        releaseChangelog = {
            def dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm")
            dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"))
            def branch
            if (System.env.BRANCH_NAME) {
                branch = System.env.BRANCH_NAME
                branch = branch.substring(branch.lastIndexOf("/") + 1)
            } else {
                branch = "git rev-parse --abbrev-ref HEAD".execute().in.text.trim()
            }
            if (branch == "HEAD") {
                branch = "git rev-parse --short HEAD".execute().in.text.trim()
            }
            def time = dateFormat.format(new Date())
            def changes = new StringBuilder()
            changes << "## Architectury v$project.version for $project.supported_version\nUpdated at **$time**.\n[Click here for changelog](https://www.github.com/architectury/architectury/commits/$branch)"
            def proc = "git log --max-count=200 --pretty=format:%s".execute()
            proc.in.eachLine { line ->
                def processedLine = line.toString()
                if (!processedLine.contains("New translations") && !processedLine.contains("Merge") && !processedLine.contains("branch")) {
                    changes << "\n- ${processedLine.capitalize()}"
                }
            }
            proc.waitFor()
            return changes.toString()
        }
    }

    java {
        withSourcesJar()
    }
}

task licenseFormatAll
subprojects { p -> licenseFormatAll.dependsOn("${p.path}:licenseFormat") }
