pipeline {
    agent any

    options {
        timestamps()
        buildDiscarder(logRotator(numToKeepStr: '10'))
    }

    stages {
        stage('Build Docker Image') {
            steps {
                sh '''
                    docker build \
                      -t cpp-mingw-vcpkg:latest \
                      -f docker/cpp-mingw-vcpkg/Dockerfile .
                '''
            }
        }

        stage('Build Linux') {
            steps {
                sh '''
                    docker run --rm \
                      -v "$PWD:/workspace" \
                      -w /workspace \
                      cpp-mingw-vcpkg:latest \
                      bash -c "
                        rm -rf build/linux &&
                        cmake -S . -B build/linux -G Ninja \
                          -DCMAKE_BUILD_TYPE=Release \
                          -DCMAKE_TOOLCHAIN_FILE=/opt/vcpkg/scripts/buildsystems/vcpkg.cmake &&
                        cmake --build build/linux
                      "
                '''
            }
        }

        stage('Build Windows MinGW') {
            steps {
                sh '''
                    docker run --rm \
                      -v "$PWD:/workspace" \
                      -w /workspace \
                      cpp-mingw-vcpkg:latest \
                      bash -c "
                        rm -rf build/windows &&
                        cmake -S . -B build/windows -G Ninja \
                          -DCMAKE_BUILD_TYPE=Release \
                          -DCMAKE_TOOLCHAIN_FILE=/opt/vcpkg/scripts/buildsystems/vcpkg.cmake \
                          -DVCPKG_TARGET_TRIPLET=x64-mingw-static \
                          -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
                          -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ &&
                        cmake --build build/windows
                      "
                '''
            }
        }

        stage('Package') {
            steps {
                sh '''
                    mkdir -p artifacts
                    tar -czf artifacts/linux-build.tar.gz -C build linux
                    zip -r artifacts/windows-build.zip build/windows
                '''
            }
        }

        stage('Archive') {
            steps {
                archiveArtifacts artifacts: 'artifacts/*', fingerprint: true
            }
        }
    }
}