#!/bin/bash

# 测试 web-dist 分支构建和获取流程
# 用于验证 CI/CD 流程和 manage.sh 的修改

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;36m'
NC='\033[0m' # No Color

print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

# 测试构建并推送到 web-dist 分支
test_build_and_push() {
    print_info "开始测试构建和推送流程..."
    
    # 检查是否在项目根目录
    if [ ! -f "package.json" ] || [ ! -d "web/admin-spa" ]; then
        print_error "请在项目根目录运行此脚本"
        return 1
    fi
    
    # 构建前端
    print_info "构建前端..."
    cd web/admin-spa
    
    # 检查 node_modules
    if [ ! -d "node_modules" ]; then
        print_info "安装前端依赖..."
        npm install
    fi
    
    # 执行构建
    npm run build
    
    if [ ! -d "dist" ]; then
        print_error "构建失败，dist 目录不存在"
        cd ../..
        return 1
    fi
    
    print_success "前端构建成功"
    cd ../..
    
    # 创建临时目录保存构建产物
    TEMP_DIR=$(mktemp -d)
    print_info "复制构建产物到临时目录: $TEMP_DIR"
    cp -r web/admin-spa/dist/* "$TEMP_DIR/"
    
    # 配置 git
    git config user.name "Test User"
    git config user.email "test@example.com"
    
    # 检查 web-dist 分支是否存在
    print_info "检查 web-dist 分支..."
    if git ls-remote --heads origin web-dist | grep -q web-dist; then
        print_info "web-dist 分支已存在，获取最新版本"
        git fetch origin web-dist:web-dist
        git checkout web-dist
    else
        print_info "创建新的 web-dist 分支"
        git checkout --orphan web-dist
    fi
    
    # 清空当前目录（保留 .git）
    git rm -rf . 2>/dev/null || true
    
    # 复制构建产物
    cp -r "$TEMP_DIR"/* .
    
    # 添加 README
    cat > README.md << EOF
# Claude Relay Service - Web Frontend Build

This branch contains the pre-built frontend assets for Claude Relay Service.

**DO NOT EDIT FILES IN THIS BRANCH DIRECTLY**

These files are automatically generated by the CI/CD pipeline.

Test Build Date: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
EOF
    
    # 提交
    git add -A
    git commit -m "test: frontend build test $(date +%Y%m%d%H%M%S)"
    
    print_success "本地 web-dist 分支创建成功"
    print_warning "注意：这只是本地测试，没有推送到远程仓库"
    print_info "如需推送，请运行: git push origin web-dist --force"
    
    # 切换回主分支
    git checkout main
    
    # 清理临时目录
    rm -rf "$TEMP_DIR"
    
    print_success "测试完成"
}

# 测试从 web-dist 分支获取文件
test_fetch_from_web_dist() {
    print_info "测试从 web-dist 分支获取文件..."
    
    # 创建测试目录
    TEST_DIR="test-web-dist-fetch"
    rm -rf "$TEST_DIR"
    mkdir -p "$TEST_DIR"
    
    # 检查远程 web-dist 分支
    if ! git ls-remote --heads origin web-dist | grep -q web-dist; then
        print_warning "远程 web-dist 分支不存在"
        print_info "尝试使用本地 web-dist 分支..."
        
        # 检查本地分支
        if ! git branch | grep -q web-dist; then
            print_error "本地和远程都没有 web-dist 分支"
            rm -rf "$TEST_DIR"
            return 1
        fi
    fi
    
    print_info "克隆 web-dist 分支到测试目录..."
    
    # 创建临时目录用于 clone
    TEMP_CLONE_DIR=$(mktemp -d)
    
    # 获取仓库 URL
    REPO_URL=$(git config --get remote.origin.url)
    
    # 克隆 web-dist 分支
    if git clone --depth 1 --branch web-dist --single-branch "$REPO_URL" "$TEMP_CLONE_DIR" 2>/dev/null; then
        print_success "成功克隆 web-dist 分支"
        
        # 复制文件（排除 .git 和 README.md）
        if command -v rsync >/dev/null 2>&1; then
            rsync -av --exclude='.git' --exclude='README.md' "$TEMP_CLONE_DIR/" "$TEST_DIR/"
        else
            cp -r "$TEMP_CLONE_DIR"/* "$TEST_DIR/" 2>/dev/null
            rm -rf "$TEST_DIR/.git" 2>/dev/null
            rm -f "$TEST_DIR/README.md" 2>/dev/null
        fi
        
        print_success "文件复制成功"
        print_info "测试目录内容:"
        ls -la "$TEST_DIR" | head -10
        
        # 验证关键文件
        if [ -f "$TEST_DIR/index.html" ]; then
            print_success "✓ index.html 文件存在"
        else
            print_error "✗ index.html 文件不存在"
        fi
        
        if [ -d "$TEST_DIR/assets" ]; then
            print_success "✓ assets 目录存在"
        else
            print_error "✗ assets 目录不存在"
        fi
        
    else
        print_error "克隆 web-dist 分支失败"
        print_info "可能需要先运行: test_build_and_push"
    fi
    
    # 清理
    rm -rf "$TEMP_CLONE_DIR"
    rm -rf "$TEST_DIR"
    
    print_success "获取测试完成"
}

# 显示帮助
show_help() {
    echo "用法: $0 [命令]"
    echo ""
    echo "命令:"
    echo "  build   - 测试构建并创建本地 web-dist 分支"
    echo "  fetch   - 测试从 web-dist 分支获取文件"
    echo "  all     - 运行所有测试"
    echo "  help    - 显示帮助"
    echo ""
}

# 主函数
main() {
    case "$1" in
        build)
            test_build_and_push
            ;;
        fetch)
            test_fetch_from_web_dist
            ;;
        all)
            test_build_and_push
            echo ""
            test_fetch_from_web_dist
            ;;
        help)
            show_help
            ;;
        *)
            print_error "未知命令: $1"
            echo ""
            show_help
            ;;
    esac
}

# 运行主函数
main "$@"