pipeline {
    // 可以在这里指定运行的节点，any 表示任何可用的 Jenkins 节点
    agent any

    environment {
        // 定义镜像名称和标签
        DOCKER_REGISTRY = '' // 如果有私有仓库，填在这里，如 'registry.cn-hangzhou.aliyuncs.com/my-ns/'
        FRONTEND_IMAGE_NAME = 'writeoff-frontend'
        BACKEND_IMAGE_NAME = 'writeoff-backend'
        IMAGE_TAG = "${env.BUILD_NUMBER}" // 或者用 git commit hash

        // 部署的目标服务器目录
        DEPLOY_DIR = '/opt/writeoff'
    }

    stages {
        // ---------------------------------------------------------
        // 后端构建阶段
        // ---------------------------------------------------------
        stage('Build Backend') {
            when {
                // 仅当 backend 目录下的文件或 Dockerfile 发生变化时执行
                changeset "backend/**"
            }
            steps {
                echo "=============================="
                echo "🚀 检测到后端代码变更，开始构建后端镜像..."
                echo "=============================="
                dir('backend') {
                    // 使用 Docker 构建后端镜像
                    sh "docker build -t ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG} ."
                    sh "docker tag ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG} ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:latest"
                    
                    // 如果有私有仓库，可以在这里 push
                    // sh "docker push ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG}"
                    // sh "docker push ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:latest"
                }
            }
        }

        // ---------------------------------------------------------
        // 前端构建与部署阶段 (方案1: 直接打包并复制静态文件)
        // ---------------------------------------------------------
        stage('Build & Deploy Frontend') {
            when {
                // 仅当 frontend 目录下的文件发生变化时执行
                changeset "frontend/**"
            }
            steps {
                echo "=============================="
                echo "🚀 检测到前端代码变更，开始构建前端..."
                echo "=============================="
                dir('frontend') {
                    // 使用 npm 安装依赖并构建
                    sh "npm install"
                    sh "npm run build"
                    
                    // 将打包好的静态文件复制到目标服务器的 Nginx 目录
                    // TODO: 请将 root@your-server:/usr/share/nginx/html/ 替换为实际部署路径
                    echo "📦 部署前端静态文件(dist)到 Nginx 目录..."
                    sh "scp -r dist/* root@your-server:/usr/share/nginx/html/"
                }
            }
        }

        // ---------------------------------------------------------
        // 部署阶段 (使用 Docker Compose)
        // ---------------------------------------------------------
        stage('Deploy') {
            steps {
                echo "=============================="
                echo "📦 开始部署项目..."
                echo "=============================="
                
                // 这里假设您是在 Jenkins 本机运行 docker-compose，或者通过 SSH 连到目标服务器执行
                // 示例中我们直接通过 docker-compose up -d 更新服务
                sh "docker-compose up -d"
                
                // 清理悬空镜像（可选项，防止磁盘占用过大）
                sh "docker image prune -f"
            }
        }
    }

    // ---------------------------------------------------------
    // 构建后处理
    // ---------------------------------------------------------
    post {
        success {
            echo "✅ 构建和部署成功！"
        }
        failure {
            echo "❌ 构建或部署失败，请检查 Jenkins 日志。"
        }
    }
}
