pipeline {
    agent any

    tools {
        jdk 'Temurin 21'
    }

    environment {
        GITEA_API_URL = 'https://di9.ru/git/api/v1/repos/Voomra/ss14-launcher-extractor/releases'
        GITEA_TOKEN = credentials('JENKINS_GITEA_ACCESS_TOKEN')
    }

    stages {
        stage('Сборка') {
            steps {
                sh './gradlew clean shadowJar'
            }
        }

        stage('Создание релиза') {
            steps {
                script {
                    def version = sh(script: './gradlew properties -q | grep "version:" | awk \'{print $2}\'', returnStdout: true).trim()

                    def releaseData = """
                                      {
                                        "tag_name": "v${version}",
                                        "name": "Release v${version}",
                                        "draft": false,
                                        "prerelease": false
                                      }
                                      """

                    def responseApi = httpRequest(
                        url: env.GITEA_API_URL,
                        httpMode: 'POST',
                        customHeaders: [
                            [name: 'Accept', value: 'application/json'],
                            [name: 'Content-Type', value: 'application/json;charset=utf-8'],
                            [name: 'Authorization', value: 'token ' + env.GITEA_TOKEN],
                        ],
                        requestBody: releaseData)

                    def releaseId = new groovy.json.JsonSlurper().parseText(responseApi.content).id
                    env.RELEASE_ID = releaseId
                }
            }
        }

        stage('Загрузка файлов в релиз') {
            steps {
                script {
                    if (!env.RELEASE_ID) {
                        error '❌ ID релиза не определен'
                    }

                    def files = findFiles(glob: 'build/libs/*.jar')
                    if (files.length == 0) {
                        echo '⚠️ Нет артефактов для загрузки'
                        return
                    }

                    files.each { file ->
                        def fileName = file.name
                        echo "Загружаем файл: ${fileName}"

                        httpRequest(
                            url: "${env.GITEA_API_URL}/${env.RELEASE_ID}/assets?name=${fileName}",
                            httpMode: 'POST',
                            customHeaders: [
                                [name: 'Accept', value: 'application/json'],
                                [name: 'Content-Type', value: 'multipart/form-data'],
                                [name: 'Authorization', value: 'token ' + env.GITEA_TOKEN]
                            ],
                            uploadFile: "build/libs/${fileName}",
                            multipartName: 'attachment')
                    }
                }
            }
        }
    }
}
