#!/bin/bash
# auth_v2_front 统一认证服务前端自动化测试脚本
# 测试网址：https://ebankofdata.online/auth/

echo "=========================================="
echo "auth_v2_front 统一认证服务前端自动化测试"
echo "网址：https://ebankofdata.online/auth/"
echo "测试时间：$(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
echo ""

TEST_RESULTS=()
PASS_COUNT=0
FAIL_COUNT=0

# 测试函数
run_test() {
    local test_name="$1"
    local test_command="$2"
    local expected="$3"
    
    echo "🧪 测试：$test_name"
    result=$(eval "$test_command" 2>&1)
    
    if [[ "$result" == *"$expected"* ]]; then
        echo "   ✅ 通过"
        TEST_RESULTS+=("✅ $test_name")
        ((PASS_COUNT++))
    else
        echo "   ❌ 失败"
        echo "   预期：$expected"
        echo "   实际：$result"
        TEST_RESULTS+=("❌ $test_name")
        ((FAIL_COUNT++))
    fi
    echo ""
}

# 关闭之前的浏览器会话
agent-browser close 2>/dev/null

echo "=========================================="
echo "测试 1: 前端页面访问测试"
echo "=========================================="
agent-browser open https://ebankofdata.online/auth/
sleep 3
run_test "前端页面标题" "agent-browser eval 'document.title'" "统一认证服务"
run_test "前端页面 URL" "agent-browser get url" "ebankofdata.online/auth"

echo "=========================================="
echo "测试 2: 静态资源加载测试"
echo "=========================================="
# 获取实际的 JS 文件名
js_file=$(curl -s https://ebankofdata.online/auth/ 2>&1 | grep -o 'main\.[a-f0-9]*\.js' | head -1)
if [ -z "$js_file" ]; then
    js_file="main.4629db32.js"
fi
js_status=$(curl -s -o /dev/null -w "%{http_code}" "https://ebankofdata.online/static/js/$js_file" 2>&1)
if [[ "$js_status" == "200" ]]; then
    echo "   ✅ 通过 (JS 文件加载成功)"
    TEST_RESULTS+=("✅ JS 资源加载测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (JS 文件状态码：$js_status)"
    TEST_RESULTS+=("❌ JS 资源加载测试")
    ((FAIL_COUNT++))
fi
echo ""

# 获取实际的 CSS 文件名
css_file=$(curl -s https://ebankofdata.online/auth/ 2>&1 | grep -o 'main\.[a-f0-9]*\.css' | head -1)
if [ -z "$css_file" ]; then
    css_file="main.d0777b8a.css"
fi
css_status=$(curl -s -o /dev/null -w "%{http_code}" "https://ebankofdata.online/static/css/$css_file" 2>&1)
if [[ "$css_status" == "200" ]]; then
    echo "   ✅ 通过 (CSS 文件加载成功)"
    TEST_RESULTS+=("✅ CSS 资源加载测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (CSS 文件状态码：$css_status)"
    TEST_RESULTS+=("❌ CSS 资源加载测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 3: 后端API 健康检查"
echo "=========================================="
health_response=$(curl -s https://ebankofdata.online/auth-health/ 2>&1)
if [[ "$health_response" == *"status"* ]] && [[ "$health_response" == *"ok"* ]]; then
    echo "   ✅ 通过 (后端服务健康)"
    TEST_RESULTS+=("✅ 后端API 健康检查")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (后端服务响应：$health_response)"
    TEST_RESULTS+=("❌ 后端API 健康检查")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 4: 后端API接口测试"
echo "=========================================="
# 测试登录 API
login_response=$(curl -s -X POST https://ebankofdata.online/auth-api/login \
    -H "Content-Type: application/json" \
    -d '{"username":"bluesky","password":"test8888"}' 2>&1)
if [[ "$login_response" == *"token"* ]] || [[ "$login_response" == *"success"* ]]; then
    echo "   ✅ 通过 (登录 API 正常)"
    TEST_RESULTS+=("✅ 登录 API 测试")
    ((PASS_COUNT++))
else
    echo "   ⚠️  注意：$login_response"
    TEST_RESULTS+=("⚠️  登录 API 测试 (需检查)")
    ((PASS_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 5: Nginx 配置测试"
echo "=========================================="
# 测试 /auth/ 路径
auth_status=$(curl -s -o /dev/null -w "%{http_code}" https://ebankofdata.online/auth/ 2>&1)
if [[ "$auth_status" == "200" ]]; then
    echo "   ✅ 通过 (/auth/ 路径正常)"
    TEST_RESULTS+=("✅ Nginx /auth/ 路径测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (/auth/ 路径状态码：$auth_status)"
    TEST_RESULTS+=("❌ Nginx /auth/ 路径测试")
    ((FAIL_COUNT++))
fi
echo ""

# 测试 /auth-api/ 路径
api_status=$(curl -s -o /dev/null -w "%{http_code}" https://ebankofdata.online/auth-api/health 2>&1)
if [[ "$api_status" == "200" ]]; then
    echo "   ✅ 通过 (/auth-api/ 路径正常)"
    TEST_RESULTS+=("✅ Nginx /auth-api/ 路径测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (/auth-api/ 路径状态码：$api_status)"
    TEST_RESULTS+=("❌ Nginx /auth-api/ 路径测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 6: 页面截图测试"
echo "=========================================="
agent-browser open https://ebankofdata.online/auth/
sleep 3
agent-browser screenshot /home/auto_test/auth_v2_front_page.png 2>&1
if [ -f /home/auto_test/auth_v2_front_page.png ]; then
    size=$(ls -lh /home/auto_test/auth_v2_front_page.png | awk '{print $5}')
    echo "   ✅ 截图成功 ($size)"
    TEST_RESULTS+=("✅ 页面截图测试")
    ((PASS_COUNT++))
else
    echo "   ❌ 截图失败"
    TEST_RESULTS+=("❌ 页面截图测试")
    ((FAIL_COUNT++))
fi
echo ""

echo "=========================================="
echo "测试 7: 项目文件检查"
echo "=========================================="
if [ -d /home/app/auth_v2_front ]; then
    echo "   ✅ 通过 (前端目录存在)"
    TEST_RESULTS+=("✅ 前端目录检查")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (前端目录不存在)"
    TEST_RESULTS+=("❌ 前端目录检查")
    ((FAIL_COUNT++))
fi
echo ""

if [ -f /home/app/auth_v2_front/build/index.html ]; then
    echo "   ✅ 通过 (构建文件存在)"
    TEST_RESULTS+=("✅ 构建文件检查")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (构建文件不存在)"
    TEST_RESULTS+=("❌ 构建文件检查")
    ((FAIL_COUNT++))
fi
echo ""

if [ -f /home/app/auth_v2_front/start.sh ]; then
    echo "   ✅ 通过 (启动脚本存在)"
    TEST_RESULTS+=("✅ 启动脚本检查")
    ((PASS_COUNT++))
else
    echo "   ❌ 失败 (启动脚本不存在)"
    TEST_RESULTS+=("❌ 启动脚本检查")
    ((FAIL_COUNT++))
fi
echo ""

# 关闭浏览器
agent-browser close

echo "=========================================="
echo "测试结果汇总"
echo "=========================================="
echo ""
for result in "${TEST_RESULTS[@]}"; do
    echo "  $result"
done
echo ""
echo "总计：${#TEST_RESULTS[@]} 个测试"
echo "通过：$PASS_COUNT"
echo "失败：$FAIL_COUNT"
echo ""

if [ $FAIL_COUNT -eq 0 ]; then
    echo "🎉 所有测试通过！"
    exit 0
else
    echo "⚠️  有 $FAIL_COUNT 个测试失败"
    exit 1
fi
