pipeline {
    agent {
        label "docker-agent-dsrv02"
    }

    environment {
        DOCKER_REGISTRY = 'gitea.postio.pl'
        IMAGE_NAME = 'oxdr-swagger-ui'
    }

    parameters {
        string(name: 'BUILD_ID', defaultValue: 'latest', description: 'Image tag / build identifier')
    }

    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', credentialsId: 'postio-bot-gitea', url: 'https://gitea.postio.pl/public/microservice-repository.git'
            }
        }

        stage('Generate Swagger Docs') {
            agent {
                docker {
                    image 'bufbuild/buf:latest'
                    args '--entrypoint='
                    reuseNode true
                }
            }
            environment {
                BUF_CACHE_DIR="${env.WORKSPACE}/.cache"
            }
            steps {
                dir("${env.WORKSPACE}") {
                    echo "Generating Swagger documentation..."
                    sh "buf generate"
                }
            }
        }
        stage('Convert OpenAPI to v3') {
            agent {
                docker {
                    image 'python:3-bookworm'
                    reuseNode true
                }
            }
            steps {
                dir("${env.WORKSPACE}") {
                    echo "Converting OpenAPI V2 to V3..."
                    sh "python3 scripts/process_openapiv2.py"
                }
            }
        }

        stage('Build Docker Image') {
            steps {
                echo "Building Docker image..."
                sh "docker build -t ${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_ID} -f deployments/docker/Dockerfile deployments/docker/"
            }
        }

        stage('Push Docker Image') {
            steps {
                withCredentials([usernamePassword(
                    credentialsId: 'docker-registry-creds', // <-- Update to your Jenkins credentials ID
                    usernameVariable: 'DOCKER_USER',
                    passwordVariable: 'DOCKER_PASS'
                )]) {
                    echo "Logging into Docker registry..."
                    sh "echo $DOCKER_PASS | docker login ${DOCKER_REGISTRY} -u $DOCKER_USER --password-stdin"
                    echo "Pushing Docker image..."
                    sh "docker push ${DOCKER_REGISTRY}/${IMAGE_NAME}:${BUILD_ID}"
                }
            }
        }
    }

    post {
        failure {
            echo "Build failed. Check the console output for details."
        }
    }
}
