#!/usr/bin/env bash
# Tailwind 임의값 토큰 우회 차단 — plan 5대 원칙 #1.
#
# 새 코드에서 bg-[var(--*)] / text-[var(--*)] / border-[var(--*)] 등을 grep으로 차단.
# @theme 토큰을 우회해 임의값을 작성하면 이 스크립트가 fail.
#
# 예외:
# - frontend/src/lib/components/ui/  (프리미티브 정의 자체는 토큰 매핑이 필요할 수 있음)
# - frontend/src/app.css              (@theme/:root 선언이므로 grep 대상 아님)
#
# 사용:
#   npm run -C frontend lint:tokens
#
# 향후 pre-commit hook에 포함:
#   .git/hooks/pre-commit → npm run -C frontend lint:tokens

set -e

# 스크립트 위치 기준으로 frontend 루트로 이동
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FRONTEND_DIR="$(dirname "$SCRIPT_DIR")"
cd "$FRONTEND_DIR"

PATTERNS=(
  'bg-\[var\(--'
  'text-\[var\(--'
  'border-\[var\(--'
  'ring-\[var\(--'
  'fill-\[var\(--'
  'stroke-\[var\(--'
)

EXIT=0
TOTAL=0

for p in "${PATTERNS[@]}"; do
  HITS=$(grep -rEn \
    --include='*.svelte' \
    --include='*.ts' \
    --include='*.js' \
    --exclude-dir=node_modules \
    --exclude-dir=.svelte-kit \
    --exclude-dir=ui \
    "$p" src 2>/dev/null || true)
  if [ -n "$HITS" ]; then
    COUNT=$(echo "$HITS" | wc -l | tr -d ' ')
    TOTAL=$((TOTAL + COUNT))
    echo ""
    echo "❌ 금지 패턴 발견: $p  ($COUNT 건)"
    echo "$HITS" | head -20
    if [ "$COUNT" -gt 20 ]; then
      echo "... (이하 $((COUNT - 20)) 건 생략)"
    fi
    EXIT=1
  fi
done

if [ $EXIT -eq 0 ]; then
  echo "✅ 토큰 우회 패턴 없음."
else
  echo ""
  echo "총 $TOTAL 건의 토큰 우회 패턴이 발견되었습니다."
  echo "→ @theme 유틸리티 (bg-surface, text-dim, border-default 등)로 교체하세요."
fi

exit $EXIT
