pipeline {
  agent any

  parameters {
    choice(name: 'SERVICE', choices: ['tenant-service', 'im-service', 'push-service', 'update-service', 'demo-service', 'file-service'], description: '要构建的服务模块')
    string(name: 'IMAGE_TAG', defaultValue: 'latest', description: '镜像 Tag（如 v1.2.3 或 latest）')
    booleanParam(name: 'DEPLOY', defaultValue: true, description: '构建后是否自动部署到生产服务器')
  }

  environment {
    ACR_REGISTRY  = 'crpi-n44qjpuucgjt8e8c.cn-beijing.personal.cr.aliyuncs.com'
    ACR_NAMESPACE = 'xuqmgroup'
    ACR_USERNAME  = 'xuqinmin12'
    PROD_HOST     = '106.54.23.149'
    PROD_USER     = 'ubuntu'
    COMPOSE_FILE  = '/opt/xuqm/deploy/compose.production.yaml'
  }

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

    stage('Docker Build & Push') {
      steps {
        withCredentials([string(credentialsId: 'ACR_PASSWORD', variable: 'ACR_PASS')]) {
          script {
            def imageName = "${ACR_REGISTRY}/${ACR_NAMESPACE}/${params.SERVICE}:${params.IMAGE_TAG}"
            bat """
              docker login ${ACR_REGISTRY} -u ${ACR_USERNAME} -p %ACR_PASS%
              docker build --build-arg SERVICE_MODULE=${params.SERVICE} -t ${imageName} .
              docker push ${imageName}
              docker rmi ${imageName}
            """
          }
        }
      }
    }

    stage('Deploy to Production') {
      when { expression { return params.DEPLOY } }
      steps {
        withCredentials([sshUserPrivateKey(credentialsId: 'PROD_SSH_KEY', keyFileVariable: 'SSH_KEY')]) {
          script {
            def imageName = "${ACR_REGISTRY}/${ACR_NAMESPACE}/${params.SERVICE}:${params.IMAGE_TAG}"
            bat """
              ssh -i "%SSH_KEY%" -o StrictHostKeyChecking=no ${PROD_USER}@${PROD_HOST} "docker pull ${imageName} && docker compose -f ${COMPOSE_FILE} up -d --no-deps ${params.SERVICE} && docker image prune -f"
            """
          }
        }
      }
    }
  }

  post {
    success { echo "✅ ${params.SERVICE}:${params.IMAGE_TAG} 构建部署成功" }
    failure  { echo "❌ 构建失败，请检查日志" }
  }
}
