pipeline {
    agent any

    environment {
        QT_VERSION = '6.10.2'
        QT_MODULES = 'qtmultimedia qtserialport qtimageformats qtwebsockets qtwebengine qtpdf qtwebview qt5compat qtwebchannel qtpositioning qtlocation qtsensors'
        HARBOR_REGISTRY = 'harbor.sl.defence-elec.de/proxydockerhub'
        IMAGE_NAME = 'qt6-framework'
        IMAGE_TAG = "${QT_VERSION}"
    }

    options {
        timeout(time: 30, unit: 'MINUTES')
        buildDiscarder(logRotator(numToKeepStr: '10'))
    }

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Build Qt6 Container') {
            steps {
                script {
                    dir('external-dependencies/qt6-framework') {
                        sh """
                            docker build \
                              --build-arg QT_VERSION=${QT_VERSION} \
                              --build-arg QT_MODULES='${QT_MODULES}' \
                              -t ${HARBOR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} \
                              -t ${HARBOR_REGISTRY}/${IMAGE_NAME}:latest \
                              .
                        """
                    }
                }
            }
        }

        stage('Verify Qt6') {
            steps {
                script {
                    sh """
                        docker run --rm ${HARBOR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} bash -c '
                          echo "Qt6 Version:" && qmake6 --version &&
                          qmake6 --version | grep -q "${QT_VERSION}"
                        '
                    """
                }
            }
        }

        stage('Generate SBOM') {
            steps {
                script {
                    dir('external-dependencies/qt6-framework') {
                        sh """
                            mkdir -p sbom
                            
                            # Set environment variables for SBOM generation
                            export GIT_URL="${env.GIT_URL}"
                            export GIT_COMMIT="${env.GIT_COMMIT}"
                            export BUILD_NUMBER="${env.BUILD_NUMBER}"
                            export DOCKERFILE_PATH="external-dependencies/qt6-framework/Dockerfile"
                            
                            # Generate CycloneDX SBOM, SLSA provenance, and license report
                            bash ../scripts/generate-sbom.sh qt6-framework ${QT_VERSION} ./sbom
                        """
                    }
                }
            }
        }

        stage('Push to Registry') {
            steps {
                script {
                    withCredentials([usernamePassword(
                        credentialsId: 'harbor-credentials',
                        usernameVariable: 'HARBOR_USER',
                        passwordVariable: 'HARBOR_PASSWORD'
                    )]) {
                        sh """
                            echo ${HARBOR_PASSWORD} | docker login ${HARBOR_REGISTRY} -u ${HARBOR_USER} --password-stdin
                            docker push ${HARBOR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
                            docker push ${HARBOR_REGISTRY}/${IMAGE_NAME}:latest
                            docker logout ${HARBOR_REGISTRY}
                        """
                    }
                }
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}