#!/bin/bash
# Preflight checks - draait voor elke deploy om veelvoorkomende fouten te vangen
#
# Checks:
# 1. ESLint
# 2. Vite build (syntax errors, missing imports)
# 3. Hardcoded asset paden die BASE_URL missen
# 4. Gerefereerde public/ bestanden bestaan daadwerkelijk

set -e

ERRORS=0

echo "=== Preflight Checks ==="
echo ""

# 1. Lint check
echo "[1/4] ESLint..."
if npm run lint --silent 2>&1; then
  echo "  OK"
else
  echo "  FOUT: lint errors gevonden"
  ERRORS=$((ERRORS + 1))
fi
echo ""

# 2. Build check
echo "[2/4] Vite build..."
npm run build --silent
echo "  OK"
echo ""

# 3. Check voor hardcoded asset paden zonder BASE_URL
# Zoekt naar src= of avatar: paden die beginnen met "/" gevolgd door een bestandsnaam
# maar NIET import.meta.env.BASE_URL gebruiken
echo "[3/4] Asset paden check (BASE_URL)..."
BAD_PATHS=$(grep -rn 'src=\s*"\/[a-zA-Z0-9]' src/ --include="*.jsx" --include="*.js" 2>/dev/null || true)
BAD_AVATAR=$(grep -rn "avatar:\s*[\"']/[a-zA-Z0-9]" src/ --include="*.jsx" --include="*.js" 2>/dev/null || true)

if [ -n "$BAD_PATHS" ] || [ -n "$BAD_AVATAR" ]; then
  echo "  FOUT: Hardcoded asset paden gevonden zonder BASE_URL prefix!"
  echo "  Deze breken zodra Vite base path verandert (bijv. naar een sub-pad)."
  echo ""
  [ -n "$BAD_PATHS" ] && echo "$BAD_PATHS" | sed 's/^/    /'
  [ -n "$BAD_AVATAR" ] && echo "$BAD_AVATAR" | sed 's/^/    /'
  echo ""
  echo "  Fix: gebruik \${import.meta.env.BASE_URL}bestandsnaam.jpg"
  ERRORS=$((ERRORS + 1))
else
  echo "  OK"
fi
echo ""

# 4. Check dat gerefereerde bestanden in public/ bestaan
echo "[4/4] Public assets bestaan..."
MISSING=0
for file in public/*; do
  [ -f "$file" ] || continue
done

# Zoek alle BASE_URL referenties en check of het bestand bestaat in public/
# Matcht alleen bestandsnamen (letters, cijfers, punt, streepje, underscore)
REFS=$(grep -roh 'BASE_URL}[a-zA-Z0-9._/~-]*' src/ --include="*.jsx" --include="*.js" 2>/dev/null | sed 's/BASE_URL}//' | grep -v '^$' || true)
for ref in $REFS; do
  if [ ! -f "public/$ref" ]; then
    echo "  FOUT: public/$ref bestaat niet (gerefereerd in code)"
    MISSING=$((MISSING + 1))
  fi
done

if [ "$MISSING" -eq 0 ]; then
  echo "  OK"
else
  ERRORS=$((ERRORS + MISSING))
fi
echo ""

# Resultaat
echo "=== Resultaat ==="
if [ "$ERRORS" -gt 0 ]; then
  echo "GEFAALD: $ERRORS fout(en) gevonden. Fix deze voor deploy."
  exit 1
else
  echo "ALLES OK - klaar voor deploy."
  exit 0
fi
