pipeline {
    agent any

    environment {
        CI_REGISTRY    = '192.168.1.154:31010'
        DOCKER_IMAGE   = 'docker/file-system-server'
        DOCKER_TAG     = "${BUILD_NUMBER}"
        DEPLOY_DIR     = '/home/xiangning/deploy/file-system-server'
    }

    stages {

        stage('Checkout') {
            steps {
                echo '=== Checkout ==='
                checkout scm
                sh 'git log --oneline -5'
            }
        }

        stage('Build') {
            steps {
                echo '=== Build Docker Image ==='
                sh """
                    echo "Registry: ${CI_REGISTRY}"
                    echo "Image: ${DOCKER_IMAGE}:${DOCKER_TAG}"
                    docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} .
                    docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest
                """
            }
        }

        stage('Push') {
            steps {
                echo '=== Push to Registry ==='
                sh """
                    echo 'dockerxn001624.' | docker login -u docker --password-stdin ${CI_REGISTRY}
                    docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${CI_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_TAG}
                    docker tag ${DOCKER_IMAGE}:latest ${CI_REGISTRY}/${DOCKER_IMAGE}:latest
                    docker push ${CI_REGISTRY}/${DOCKER_IMAGE}:${DOCKER_TAG}
                    docker push ${CI_REGISTRY}/${DOCKER_IMAGE}:latest
                """
            }
        }

        stage('Deploy') {
            steps {
                echo '=== Deploy ==='
                sh """
                    mkdir -p ${DEPLOY_DIR}
                    cd ${DEPLOY_DIR}
                    cat > docker-compose.yml << 'DCOF'
services:
  file-system-server:
    image: ${CI_REGISTRY}/${DOCKER_IMAGE}:latest
    container_name: file-system-server
    network_mode: host
    restart: unless-stopped
    environment:
      - ConnectionStrings__Default=Host=192.168.1.154;Port=5432;Database=file_system;Username=postgres;Password=postgres
      - S3__Endpoint=http://192.168.1.154:9000
      - S3__AccessKey=minioadmin
      - S3__SecretKey=minioadmin
      - S3__Region=us-east-1
      - Jwt__Authority=http://192.168.1.154:5215
    volumes:
      - ./logs:/app/logs
DCOF
                    docker compose pull
                    docker compose down --remove-orphans || true
                    docker compose up -d
                    docker image prune -f
                    docker compose ps
                """
            }
        }
    }

    post {
        success {
            echo '=== CI/CD SUCCESS ==='
        }
        failure {
            echo '=== CI/CD FAILED ==='
        }
        always {
            deleteDir()
        }
    }
}
