pipeline {
    agent any
    
    environment {
        IMAGE_NAME = 'awesome-index'
        CONTAINER_NAME = 'awesome'
        DEPLOY_PATH = '/app/awesome'
        SSH_HOST = '114.134.187.170'
        SSH_USER = 'root'
    }
    
    stages {
        stage('Build') {
            steps {
                script {
                    echo "Building Docker image ${IMAGE_NAME}:${BUILD_NUMBER}"
                    sh "docker build -t ${IMAGE_NAME}:${BUILD_NUMBER} ."
                    sh "docker tag ${IMAGE_NAME}:${BUILD_NUMBER} ${IMAGE_NAME}:latest"
                }
            }
        }
        
        stage('Deploy') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'baihu-ssh', usernameVariable: 'SSH_USER', passwordVariable: 'SSH_PASS')]) {
                    script {
                        def remote = "root@${SSH_HOST}"
                        
                        // 创建部署目录
                        sh "sshpass -p '${SSH_PASS}' ssh -o StrictHostKeyChecking=no ${remote} 'mkdir -p ${DEPLOY_PATH}/data ${DEPLOY_PATH}/logs'"
                        
                        // 复制必要文件
                        sh "sshpass -p '${SSH_PASS}' scp -o StrictHostKeyChecking=no docker-compose.yml ${remote}:${DEPLOY_PATH}/"
                        sh "sshpass -p '${SSH_PASS}' scp -o StrictHostKeyChecking=no .env.example ${remote}:${DEPLOY_PATH}/.env"
                        sh "sshpass -p '${SSH_PASS}' scp -o StrictHostKeyChecking=no start.sh ${remote}:${DEPLOY_PATH}/"
                        
                        // 导入镜像
                        sh "docker save ${IMAGE_NAME}:latest | gzip > ${IMAGE_NAME}.tar.gz"
                        sh "sshpass -p '${SSH_PASS}' scp -o StrictHostKeyChecking=no ${IMAGE_NAME}.tar.gz ${remote}:${DEPLOY_PATH}/"
                        
                        // 在服务器上加载并重启
                        sh """
                        sshpass -p '${SSH_PASS}' ssh -o StrictHostKeyChecking=no ${remote} '
                            cd ${DEPLOY_PATH} &&
                            gunzip -c ${IMAGE_NAME}.tar.gz | docker load &&
                            rm -f ${IMAGE_NAME}.tar.gz &&
                            docker compose down --remove-orphans &&
                            docker compose up -d
                        '
                        """
                        
                        // 清理本地
                        sh "rm -f ${IMAGE_NAME}.tar.gz"
                    }
                }
            }
        }
        
        stage('Health Check') {
            steps {
                script {
                    sleep 10
                    def status = sh(
                        script: "curl -sf http://${SSH_HOST}:3000/healthz || echo 'FAILED'",
                        returnStdout: true
                    ).trim()
                    
                    if (status.contains('ok')) {
                        echo "Health check PASSED"
                    } else {
                        error "Health check FAILED"
                    }
                }
            }
        }
    }
    
    post {
        always {
            cleanWs()
        }
    }
}
