#!/usr/bin/env bash
# scan-redline.sh — 脱敏红线词扫描(UI 文案资源)。
#
# 扫描范围: design/ui_kits/**/*.{jsx,js,html}
#           design/flutter/**/*.{dart,html}
#           client/lib/**/*.dart   ← 生产 Flutter 客户端(界面文案全部走 l10n 资源)
# 不扫描:   README.md、CLAUDE.md 等纯文档文件
#
# 红线词(来源: design/CLAUDE.md §1 铁律 13):
#   VPN  翻墙  科学上网  突破封锁  自由穿越  Go anywhere
#
# 允许例外:
#   - 纯注释行 (// ... 或 /* ... 或 * ... 开头)
#   - 外部渠道 handle (@PangolinVPN_bot / @pangolinvpn 等)
#
# 发现违规 → 非零退出码 (CI fail)。
set -euo pipefail

REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$REPO_ROOT"

VIOLATIONS=0
SCANNED=0

# 逐文件扫描函数
# 用法: scan_file <文件路径>
scan_file() {
  local file="$1"
  local file_violations=0

  # 逐个红线词扫描
  for word in 'VPN' '翻墙' '科学上网' '突破封锁' '自由穿越' '[Gg]o anywhere'; do
    # 1. 找出含有红线词的行
    # 2. 排除纯注释行 (行首可选空白 + // 或 /* 或 *)
    # 3. 排除外部渠道 handle 行 (@PangolinVPN_bot / @pangolinvpn)
    local hits
    hits="$(grep -nE "$word" "$file" 2>/dev/null \
      | grep -vE '^[0-9]+:[[:space:]]*(//|/\*|\*)' \
      | grep -vE '@[Pp]angolin[Vv][Pp][Nn]_?[Bb]ot' \
      | grep -vE '@pangolinvpn' \
      || true)"

    if [ -n "$hits" ]; then
      if [ "$file_violations" -eq 0 ]; then
        echo "❌  $file" >&2
      fi
      echo "$hits" | while IFS= read -r line; do
        printf '   红线词 [%s]  %s\n' "$word" "$line" >&2
      done
      file_violations=1
    fi
  done

  return "$file_violations"
}

echo "→ 开始脱敏扫描 ..."

# 扫描 design/ui_kits 下的 jsx / js / html 文件
while IFS= read -r -d '' f; do
  SCANNED=$((SCANNED + 1))
  if ! scan_file "$f"; then
    VIOLATIONS=$((VIOLATIONS + 1))
  fi
done < <(find design/ui_kits -type f \( -name "*.jsx" -o -name "*.js" -o -name "*.html" \) -not -name "README.md" -print0)

# 扫描 design/flutter 下的 dart / html 文件
while IFS= read -r -d '' f; do
  SCANNED=$((SCANNED + 1))
  if ! scan_file "$f"; then
    VIOLATIONS=$((VIOLATIONS + 1))
  fi
done < <(find design/flutter -type f \( -name "*.dart" -o -name "*.html" \) -not -name "README.md" -print0)

# 扫描生产 Flutter 客户端 client/lib 下的 dart 文件(排除构建产物)
if [ -d client/lib ]; then
  while IFS= read -r -d '' f; do
    SCANNED=$((SCANNED + 1))
    if ! scan_file "$f"; then
      VIOLATIONS=$((VIOLATIONS + 1))
    fi
  done < <(find client/lib -type f -name "*.dart" -not -path '*/.dart_tool/*' -not -path '*/build/*' -print0)
fi

echo "→ 扫描完成：共 ${SCANNED} 个文件，${VIOLATIONS} 个违规。"
echo ""

if [ "$VIOLATIONS" -ne 0 ]; then
  echo "脱敏检查失败！请根据 design/CLAUDE.md §1 铁律 13 修改以上文案：" >&2
  echo "  - 禁用词：VPN、翻墙、科学上网、突破封锁、自由穿越、Go anywhere" >&2
  echo "  - 代用词：网络加速、极速畅连、稳定、加速线路、隐私保护、无日志" >&2
  exit 1
fi

echo "✅ 脱敏扫描通过 — 未发现红线词。"
