#!/bin/bash
# OAuth-DB CLI E2E 测试完整运行脚本
# 用途：自动启动环境 → 运行测试 → 清理环境

set -e

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

# 打印函数
print_info() {
    echo -e "${BLUE}ℹ${NC} $1"
}

print_success() {
    echo -e "${GREEN}✓${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}⚠${NC} $1"
}

print_error() {
    echo -e "${RED}✗${NC} $1"
}

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CLI_DIR="$SCRIPT_DIR"

# 解析参数
TEST_NAME=""
KEEP_ENV=false
CLEAN_CACHE=false

while [[ $# -gt 0 ]]; do
    case $1 in
        --keep-env)
            KEEP_ENV=true
            shift
            ;;
        --clean-cache)
            CLEAN_CACHE=true
            shift
            ;;
        -h|--help)
            cat << EOF
OAuth-DB CLI E2E 测试完整运行脚本

用法:
  ./run-e2e-full.sh [选项] [测试名称]

选项:
  --keep-env      测试后保持环境运行（不清理）
  --clean-cache   清理编译缓存
  -h, --help      显示此帮助信息

示例:
  ./run-e2e-full.sh                    # 运行所有测试
  ./run-e2e-full.sh e2e_basic          # 运行指定测试
  ./run-e2e-full.sh --keep-env         # 测试后保持环境
  ./run-e2e-full.sh --clean-cache      # 清理缓存后运行

EOF
            exit 0
            ;;
        *)
            TEST_NAME="$1"
            shift
            ;;
    esac
done

echo ""
print_info "OAuth-DB CLI E2E 测试套件"
echo ""

# 步骤 1: 启动环境
print_info "步骤 1/3: 启动 E2E 测试环境"
if ! "$CLI_DIR/tests/e2e_setup.sh"; then
    print_error "环境启动失败"
    exit 1
fi

echo ""

# 步骤 2: 运行测试
print_info "步骤 2/3: 运行 E2E 测试"
cd "$CLI_DIR"

# 设置环境变量
export OAUTH_DB_SERVER="http://localhost:28080"
export RUST_LOG=debug
export RUST_BACKTRACE=1

# 运行测试
TEST_RESULT=0
if [ -z "$TEST_NAME" ]; then
    print_info "运行所有 E2E 测试..."
    if cargo test --test '*' -- --test-threads=1 --nocapture; then
        print_success "所有测试通过"
    else
        print_error "部分测试失败"
        TEST_RESULT=1
    fi
else
    print_info "运行测试: $TEST_NAME"
    if cargo test --test "$TEST_NAME" -- --nocapture; then
        print_success "测试通过"
    else
        print_error "测试失败"
        TEST_RESULT=1
    fi
fi

echo ""

# 步骤 3: 清理环境
if [ "$KEEP_ENV" = false ]; then
    print_info "步骤 3/3: 清理 E2E 测试环境"
    if [ "$CLEAN_CACHE" = true ]; then
        "$CLI_DIR/tests/e2e_teardown.sh" --clean-cache
    else
        "$CLI_DIR/tests/e2e_teardown.sh"
    fi
else
    print_warning "步骤 3/3: 保持环境运行（使用 --keep-env）"
    print_info "手动清理命令: $CLI_DIR/tests/e2e_teardown.sh"
fi

echo ""

# 输出结果
if [ $TEST_RESULT -eq 0 ]; then
    print_success "E2E 测试完成 ✓"
    exit 0
else
    print_error "E2E 测试失败 ✗"
    exit 1
fi
