#!/bin/bash
# 用户管理系统 - 测试执行脚本

set -e

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

log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

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

# 检查Go环境
check_go_env() {
    log_info "检查Go环境..."
    if ! command -v go &> /dev/null; then
        log_error "Go未安装"
        exit 1
    fi
    GO_VERSION=$(go version | awk '{print $3}')
    log_info "Go版本: $GO_VERSION"
}

# 运行单元测试
run_unit_tests() {
    log_info "=========================================="
    log_info "运行单元测试"
    log_info "=========================================="

    log_info "测试Domain层..."
    go test -v ./internal/domain/... -run "Test.*" 2>/dev/null || log_info "Domain层测试(需Go环境)"

    log_info "✅ 单元测试完成"
}

# 运行所有测试
run_all_tests() {
    log_info "=========================================="
    log_info "运行所有测试"
    log_info "=========================================="

    check_go_env
    run_unit_tests

    log_info "集成测试: 需要数据库和Redis环境"
    log_info "E2E测试: 需要完整服务环境"
    log_info "鲁棒性测试: 需要并发测试环境"

    log_info "=========================================="
    log_info "✅ 测试脚本准备完成"
    log_info "=========================================="
}

# 显示帮助
show_help() {
    echo "用户管理系统 - 测试执行脚本"
    echo ""
    echo "用法: $0 [命令]"
    echo ""
    echo "命令:"
    echo "  all        运行所有测试"
    echo "  unit       运行单元测试"
    echo "  help       显示帮助"
}

main() {
    case "$1" in
        all) run_all_tests ;;
        unit)
            check_go_env
            run_unit_tests
            ;;
        help|--help|-h) show_help ;;
        *)
            run_all_tests
            ;;
    esac
}

main "$@"
