import groovy.json.JsonSlurper
import groovy.json.JsonOutput

plugins {
    id "architectury-plugin" version "3.4-SNAPSHOT"
    id "dev.architectury.loom" version "1.7-SNAPSHOT" apply false
    id "me.shedaniel.unified-publishing" version "0.1.+" apply false
    id 'com.github.johnrengelman.shadow' version '8.1.1' apply false
}

architectury {
    minecraft = rootProject.minecraft_version
}

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

    repositories {
        maven {
            url = "https://api.modrinth.com/maven"
        }
        maven { url "https://maven.terraformersmc.com/releases" }
        maven {
            name = 'AperLambda'
            url = 'https://aperlambda.github.io/maven'
        }
        mavenCentral()
        maven {
            name 'Gegy'
            url 'https://maven.gegy.dev'
        }

        maven {
            url "https://www.cursemaven.com"
            content {
                includeGroup "curse.maven"
            }
        }
        maven {
            name = 'JitPack'
            url 'https://jitpack.io'
        }
        maven {
            url "https://maven.shedaniel.me/"
        }
        maven { url "https://maven.quiltmc.org/repository/release/" }
    }

    dependencies {
        minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
        // The following line declares the yarn mappings you may select this one as well.
        mappings loom.layered {
            it.mappings("net.fabricmc:yarn:$rootProject.yarn_mappings:v2")
            it.mappings("dev.architectury:yarn-mappings-patch-neoforge:$rootProject.yarn_mappings_patch_neoforge_version")
        }
        modCompileOnlyApi ("maven.modrinth:cull-leaves:${project.cull_leaves_version}")

        modCompileOnlyApi ("maven.modrinth:iris:${project.iris_version}")
        modCompileOnly ("maven.modrinth:cit-resewn:${project.cit_resewn_version}")
        modCompileOnlyApi ("maven.modrinth:continuity:${project.continuity_version}")
        modCompileOnlyApi ("maven.modrinth:animatica:${project.animatica_version}")
        modCompileOnlyApi ("maven.modrinth:colormatic:${project.colormatic_version}")
        modCompileOnlyApi ("maven.modrinth:borderless-mining:${project.borderless_mining_version}")
        modCompileOnlyApi ("maven.modrinth:dynamic-fps:${project.dynamic_fps_version}")
        modCompileOnlyApi ("com.moandjiezana.toml:toml4j:${project.toml4j_version}")
        modCompileOnlyApi ("maven.modrinth:entitytexturefeatures:${project.etf_version}")
        modCompileOnlyApi ("maven.modrinth:entity-model-features:${project.emf_version}")
        modCompileOnlyApi ("maven.modrinth:completeconfig:${project.complete_config_version}")
        //modImplementation ("maven.modrinth:exordium:${project.exordium_version}")


        modCompileOnlyApi ("maven.modrinth:lambdynamiclights:${project.ldl_version}")
        modCompileOnlyApi ("maven.modrinth:lambdabettergrass:${project.lbg_version}")
        modCompileOnlyApi "dev.lambdaurora:spruceui:${project.spruceui_version}"
    }
}

allprojects {
    apply plugin: "java"
    apply plugin: "architectury-plugin"
    apply plugin: "maven-publish"

    archivesBaseName = rootProject.archives_base_name
    version = rootProject.mod_version
    group = rootProject.maven_group

    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
        options.release = 21
    }
    ext {
        releaseChangelog = {
            def changes = new StringBuilder()
            changes << "## Puzzle v$project.version for $project.minecraft_version\n[View the changelog](https://www.github.com/PuzzleMC/Puzzle/commits/)"
            def proc = "git log --max-count=1 --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()
        }
    }
    processResources {
        // Minify json resources
        doLast {
            fileTree(dir: outputs.files.asPath, include: "**/*.json").each {
                File file -> file.text = JsonOutput.toJson(new JsonSlurper().parse(file))
            }
        }
    }

    java {
        withSourcesJar()
    }
}
