#!/usr/bin/env bash
# ============================================================
# Komari 完整性校验脚本
# 从镜像站下载所有文件并逐个比对 SHA256
# 用法: bash <(curl -s http://8.134.130.124/komari/verify.sh)
# ============================================================
set -euo pipefail

MIRROR="http://8.134.130.124/komari"

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
info()  { echo -e "${CYAN}[INFO]${NC} $*"; }
ok()    { echo -e "${GREEN}[OK]${NC} $*"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $*"; }
err()   { echo -e "${RED}[ERR]${NC} $*"; }

echo ""
echo "  ╔══════════════════════════════════════╗"
echo "  ║   Komari 完整性校验                   ║"
echo "  ╚══════════════════════════════════════╝"
echo ""

info "获取 checksums.txt ..."
CHECKSUMS=$(curl -sS "$MIRROR/checksums.txt") || {
    err "无法获取 checksums.txt"
    exit 1
}

TOTAL=$(echo "$CHECKSUMS" | wc -l)
PASSED=0
FAILED=0
MISSING=0

echo ""
echo "  共 $TOTAL 个文件待校验"
echo "  ────────────────────────────────────────"

while IFS='  ' read -r hash file; do
    [ -z "$hash" ] && continue
    file="${file#\*}"
    file="${file# }"

    printf "  [ ] %-40s ... " "$file"

    tmpfile=$(mktemp)
    if curl -sSf "$MIRROR/$file" -o "$tmpfile" 2>/dev/null; then
        actual=$(sha256sum "$tmpfile" | awk '{print $1}')
        if [ "$hash" = "$actual" ]; then
            echo -e "${GREEN}通过${NC}"
            PASSED=$((PASSED + 1))
        else
            echo -e "${RED}校验失败${NC}"
            echo "      期望: $hash"
            echo "      实际: $actual"
            FAILED=$((FAILED + 1))
        fi
        rm -f "$tmpfile"
    else
        echo -e "${YELLOW}无法下载${NC}"
        MISSING=$((MISSING + 1))
    fi
done <<< "$CHECKSUMS"

echo ""
echo "  ────────────────────────────────────────"
echo "  结果: $PASSED 通过 / $FAILED 失败 / $MISSING 缺失 / 共 $TOTAL"
echo ""

if [ "$FAILED" -eq 0 ] && [ "$MISSING" -eq 0 ]; then
    echo -e "  ${GREEN}全部文件完整性校验通过${NC}"
elif [ "$FAILED" -eq 0 ]; then
    echo -e "  ${YELLOW}校验通过，但 $MISSING 个文件无法下载${NC}"
else
    echo -e "  ${RED}$FAILED 个文件校验失败，请重新下载${NC}"
    echo "  运行修复: bash <(curl -s $MIRROR/re-download.sh)"
fi
echo ""
