#!/bin/sh
# Pre-commit gate: Laravel Pint (PHP) + ESLint (JS/TS/Vue) must be clean on staged files.
# See CLAUDE.md "Code Quality Gate". Bypass intentionally (discouraged): git commit --no-verify

status=0

# --- Pint on staged PHP ---
php_files=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.php$' || true)
if [ -n "$php_files" ]; then
  echo "▶ Pint (pre-commit)…"
  # shellcheck disable=SC2086
  if command -v php >/dev/null 2>&1 && [ -f vendor/bin/pint ]; then
    php vendor/bin/pint --test -- $php_files || status=1
  else
    echo "⚠ Pint unavailable — skipping (run: composer lint before pushing)." >&2
  fi
fi

# --- ESLint on staged JS/TS/Vue under resources/scripts (ESLint's configured scope) ---
js_files=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '^resources/scripts/.*\.(js|cjs|mjs|ts|vue)$' || true)
if [ -n "$js_files" ]; then
  echo "▶ eslint (pre-commit)…"
  # shellcheck disable=SC2086
  if [ -x node_modules/.bin/eslint ]; then
    node_modules/.bin/eslint --max-warnings 0 $js_files || status=1
  else
    echo "⚠ eslint unavailable — skipping (run: npm run lint before pushing)." >&2
  fi
fi

if [ "$status" -ne 0 ]; then
  echo "✖ Lint failed — fix it (composer lint:fix / npx eslint --fix), then re-commit." >&2
  echo "  To bypass intentionally: git commit --no-verify" >&2
  exit 1
fi
exit 0
