#!/bin/bash
# Arena Watcher v5 全自動重建腳本（Reboot 後由零開始）
# 純 script，零 AI 判斷。每步自動驗證，失敗即停並報錯。
# 用法：./rebuild-arena.sh [--skip-apt] [--skip-venv]
#   --skip-apt: 跳過 apt 安裝（已裝過）
#   --skip-venv: 跳過 venv 重建（venv 冇爛）

set -u
SKIP_APT=false
SKIP_VENV=false
for arg in "$@"; do
    case $arg in
        --skip-apt) SKIP_APT=true ;;
        --skip-venv) SKIP_VENV=true ;;
    esac
done

LOG="$HOME/workspace/arena-system/rebuild.log"
PASS=0
FAIL=0

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG"; }
pass() { log "PASS: $1"; PASS=$((PASS+1)); }
fail() { log "FAIL: $1"; FAIL=$((FAIL+1)); }

die() {
    log "FATAL: $1"
    log "重建失敗，共 $PASS 項通過，$FAIL 項失敗。睇 $LOG 搵原因。"
    exit 1
}

check() {
    # check "描述" "命令"
    local desc="$1"; shift
    if eval "$@" >/dev/null 2>&1; then
        pass "$desc"
        return 0
    else
        fail "$desc"
        return 1
    fi
}

log "=== Arena Watcher v5 全自動重建開始 ==="

# 第 0 步：基本環境
log "--- 第 0 步：基本環境 ---"
check "SSH 去 server 通" "$HOME/workspace/ssh-newserver.sh 'echo OK' | grep -q OK" || die "SSH 唔通"
check "Python 3.10+" "python3 -c 'import sys; sys.exit(0 if sys.version_info >= (3,10) else 1)'" || die "Python 版本唔啱"
check "磁碟空間 >2GB" "[ \$(df --output=avail ~/workspace | tail -1) -gt 2000000 ]" || die "磁碟唔夠"

# 第 1 步：系統依賴
if [ "$SKIP_APT" = false ]; then
    log "--- 第 1 步：系統依賴 ---"
    sudo apt update || die "apt update 失敗"
    sudo apt install -y xvfb x11vnc fluxbox \
        libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 \
        libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 \
        libgbm1 libpango-1.0-0 libcairo2 libasound2 || die "apt install 失敗"
fi
check "Xvfb 已安裝" "which Xvfb" || die "Xvfb 唔見咗"

# 第 2 步：Playwright venv
if [ "$SKIP_VENV" = false ]; then
    log "--- 第 2 步：Playwright venv 重建 ---"
    rm -rf "$HOME/workspace/arena-system/venv"
    python3 -m venv "$HOME/workspace/arena-system/venv" || die "venv 建立失敗"
    "$HOME/workspace/arena-system/venv/bin/pip" install --upgrade pip || die "pip upgrade 失敗"
    "$HOME/workspace/arena-system/venv/bin/pip" install playwright==1.63.0 || die "playwright 安裝失敗"
    "$HOME/workspace/arena-system/venv/bin/playwright" install chromium --with-deps || {
        log "WARN: playwright install --with-deps 失敗，試唔帶 --with-deps"
        "$HOME/workspace/arena-system/venv/bin/playwright" install chromium || die "chromium 安裝失敗"
    }
fi
check "Playwright 可 import" "$HOME/workspace/arena-system/venv/bin/python -c 'from playwright.sync_api import sync_playwright'" || die "Playwright 壞咗"
check "Chromium binary 存在" "ls ~/.cache/ms-playwright/ | grep -q chromium" || die "Chromium 唔見咗"

# 第 3 步：VPN SSH Tunnel
log "--- 第 3 步：VPN SSH Tunnel ---"
check "vpn-proxies.conf 存在" "[ -f $HOME/workspace/vpn-tunnel/vpn-proxies.conf ]" || die "vpn-proxies.conf 唔見咗"
"$HOME/workspace/vpn-tunnel/vpn-tunnel.sh" start || die "tunnel 啟動失敗"
sleep 3
for port in 11080 11081 11082 11083 11084 11085 11086; do
    check "端口 $port listening" "ss -tln 2>/dev/null | grep -q '127.0.0.1:$port '" || die "端口 $port 冇 listen"
done
check "SOCKS5 11080 通" "timeout 10 curl -s --socks5 127.0.0.1:11080 https://api.ipify.org | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'" || die "SOCKS5 唔通"

# 第 4 步：Xvfb
log "--- 第 4 步：Xvfb ---"
if pgrep -f "Xvfb:99" >/dev/null; then
    log "Xvfb:99 已經在生，唔重開"
else
    Xvfb :99 -screen 0 1400x900x24 &
    echo $! > /tmp/xvfb-99.pid
    sleep 3
fi
check "Xvfb:99 在生" "pgrep -f 'Xvfb:99' >/dev/null" || die "Xvfb 起唔到"

# 第 5 步：Browser Profile
log "--- 第 5 步：Browser Profile ---"
check "local-profiles 存在" "[ -d $HOME/workspace/arena-system/local-profiles ]" || die "local-profiles 唔見咗"
for p in ai-0 ai-1 ai-12; do
    check "profile $p 存在" "[ -d $HOME/workspace/arena-system/local-profiles/$p ]" || log "WARN: profile $p 唔見咗，可能要由 server 拉"
done
check "seat-profile-map.conf 存在" "[ -f $HOME/workspace/arena-system/seat-profile-map.conf ]" || die "seat-profile-map.conf 唔見咗"
check "seats.conf 存在" "[ -f $HOME/workspace/arena-system/seats.conf ]" || die "seats.conf 唔見咗"

# 第 6 步：開 Browser（每席一個）
log "--- 第 6 步：開 Browser ---"
# 注意：seat-browser.py 可能唔存在，用 arena-watcher.py 代替（佢自己會開 browser）
for seat in A2 A3 A4; do
    if pgrep -f "watcher.py $seat" >/dev/null; then
        log "$seat watcher 已經在生，唔重開"
    else
        log "啟動 $seat watcher..."
        # arena-watcher.py 會自己開 browser
        DISPLAY=:99 "$HOME/workspace/arena-system/venv/bin/python" \
            "$HOME/workspace/arena-system/scripts/arena-watcher.py" "$seat" &
        sleep 5
    fi
done
sleep 10
for seat in A2 A3 A4; do
    check "$seat watcher 在生" "pgrep -f 'watcher.py $seat' >/dev/null" || die "$seat watcher 起唔到"
done

# 第 7 步：登入驗證（自動檢查，唔得就報要人手）
log "--- 第 7 步：登入驗證（自動檢查） ---"
log "注意：自動化登入檢查有限，如有問題睇 watcher-login-guide.txt 人手處理"
# 呢度只檢查 watcher log 有冇登入錯誤，唔做自動登入
for s in a2 a3 a4; do
    if grep -qi "logout\|登出\|login.*fail" "$HOME/workspace/arena-system/logs/watcher-$s.log" 2>/dev/null | tail -5; then
        log "WARN: $s 可能登出咗，睇 log 確認"
    fi
done

# 第 8 步：啟動 Watcher（已經喺第 6 步做咗，呢度驗證）
log "--- 第 8 步：驗證 Watcher ---"
sleep 35
for s in a2 a3 a4; do
    check "$s log 有心跳" "tail -5 $HOME/workspace/arena-system/logs/watcher-$s.log 2>/dev/null | grep -qi 'check\|檢查\|ok'" || log "WARN: $s log 可能未有心跳，等多陣再睇"
done

# 第 9 步：Cron Jobs（檢查，唔自動加）
log "--- 第 9 步：Cron 狀態 ---"
log "Cron 由 Hatch 系統管理，唔使手動加。如有缺失，喺 Muse 度用 cron.add 加返。"

# 第 10 步：全面驗收
log "--- 第 10 步：全面驗收 ---"
check "Xvfb 在生" "pgrep -f 'Xvfb:99' >/dev/null"
check "VPN tunnel 在生" "$HOME/workspace/vpn-tunnel/vpn-tunnel.sh status 2>/dev/null | grep -qi '運行中\|running'"
for seat in A2 A3 A4; do
    check "$seat watcher 在生" "pgrep -f 'watcher.py $seat' >/dev/null"
done

log "=== 重建完成：$PASS 項通過，$FAIL 項失敗 ==="
if [ "$FAIL" -gt 0 ]; then
    log "有 $FAIL 項失敗，睇上面 FAIL 行搵原因"
    exit 1
fi
log "全部通過！"
exit 0
