pipeline {
    agent any

    environment {
        REGISTRY = 'https://registry.digitalocean.com/delbank-1/internet-banking'
        TAG = "${env.BUILD_ID}"
        GIT_REPO_NAME = "python-sdk"
        PYPI_API_SOURCE = "https://upload.pypi.org/legacy/"
        GITEA_PYPI_SOURCE = 'https://git.delbank.srv.br/api/packages/DelbankDev/pypi'
    }

    options {
        disableConcurrentBuilds()
        timestamps()
    }

    stages {

        // ---------------------------------------------------------------
        // Build por BRANCH (não tag): envia apenas para o Gitea
        // Versão gerada: <ultima-tag>b<BUILD_ID>  ex: 0.6.0b47
        // ---------------------------------------------------------------
        stage('Check Branch') {
            when {
                not {
                    buildingTag()
                }
            }
            agent {
                docker {
                    image 'python:3.12-slim'
                    args '--entrypoint="" -u root'
                }
            }
            steps {
                script {
                    env.SAFE_BRANCH = env.BRANCH_NAME.replaceAll('/', '_')
                    env.TARGET_FILE_PATH = ".Jenkinsfiles/${env.SAFE_BRANCH}.groovy"

                    if (fileExists(env.TARGET_FILE_PATH)) {
                        currentBuild.result = 'SUCCESS'
                        def myScript = load(env.TARGET_FILE_PATH)
                        myScript.pipelineRoll()
                    } else {
                        echo "---------------------Branch '${env.BRANCH_NAME}' should not trigger build. Closing.---------------------"
                        currentBuild.result = 'ABORTED'
                    }
                }
            }
        }

        // ---------------------------------------------------------------
        // Build por TAG: envia para o Gitea E para o PyPI
        // Versão gerada: <tag-sem-prefixo-v>  ex: 0.6.0  (PEP 440)
        // ---------------------------------------------------------------
        stage('Publish to PyPI') {
            when {
                buildingTag()
            }
            agent {
                docker {
                    image 'python:3.12-slim'
                    args '--entrypoint="" -u root'
                }
            }
            steps {
                script {
                    // pipelineRoll() do master.groovy já faz:
                    //   - Checkout + cálculo de VERSION (sem prefixo 'v')
                    //   - Build do artefato com SETUPTOOLS_SCM_PRETEND_VERSION
                    //   - Publish no Gitea
                    def myScript = load(".Jenkinsfiles/master.groovy")
                    myScript.pipelineRoll()

                    // Após o Gitea, envia também para o PyPI oficial
                    withCredentials([
                        string(credentialsId: 'PYPI_API_KEY', variable: 'PYPI_API_KEY')
                    ]) {
                        dir("${GIT_REPO_NAME}") {
                            sh """
                                export TWINE_USERNAME=__token__
                                export TWINE_PASSWORD=${PYPI_API_KEY}

                                twine upload --verbose --repository-url ${PYPI_API_SOURCE} dist/delfinance_api_sdk-${env.VERSION}*
                            """
                        }
                    }
                }
            }
        }

    }

}