pipeline {
    agent any

    environment {
        AVS_VERSION = '1.0.0'
        HARBOR_REGISTRY = 'harbor.sl.defence-elec.de/proxydockerhub'
        IMAGE_NAME = 'avs'
        IMAGE_TAG = "${AVS_VERSION}"
        OFFLINE_CACHE_PATH = '/opt/offline-cache/avs'
    }

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

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

        stage('Prepare License Files') {
            steps {
                script {
                    // LICENSE HANDLING: AVS uses contract-based licensing.
                    // Customer has lifetime license contract - no license file required.
                    // License is managed at contract level, not file-based.
                    // DEB package (libavs-dev) will be installed from internal SCM repository.
                    sh """
                        echo "AVS license: Contract-based (no file required)"
                    """
                }
            }
        }

        stage('Build AVS Container') {
            steps {
                script {
                    dir('external-dependencies/avs') {
                        sh """
                            docker build \
                              --build-arg AVS_VERSION=${AVS_VERSION} \
                              -t ${HARBOR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} \
                              .
                        """
                    }
                }
            }
        }

        stage('Verify AVS') {
            steps {
                script {
                    sh """
                        docker run --rm ${HARBOR_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} bash -c '
                          ls -la /opt/AVS/
                        '
                    """
                }
            }
        }

        stage('Generate SBOM') {
            steps {
                script {
                    dir('external-dependencies/avs') {
                        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/avs/Dockerfile"
                            
                            # Generate CycloneDX SBOM, SLSA provenance, and license report
                            bash ../scripts/generate-sbom.sh avs ${AVS_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 logout ${HARBOR_REGISTRY}
                        """
                    }
                }
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}