#!/usr/bin/env bash
# Full gate before committing.
#   tool/dev/test-gate.sh                 Flutter: format, analyze, test
#   tool/dev/test-gate.sh --backend       + whole Laravel suite (slow, ~700 tests)
#   tool/dev/test-gate.sh --backend=Name  + phpunit --filter Name (preferred)
set -uo pipefail
source "$(dirname "$0")/env.sh"
fail=0
step() { printf '\n▶ %s\n' "$*"; }

cd "$PL_APP_DIR"
step "fvm dart format lib test";   fvm dart format lib test   || fail=1
step "fvm flutter analyze";        fvm flutter analyze        || fail=1
step "fvm flutter test";           fvm flutter test           || fail=1

backend=""
for a in "$@"; do case "$a" in --backend) backend=all ;; --backend=*) backend="${a#--backend=}" ;; esac; done
if [ -n "$backend" ]; then
  cd "$PL_BACKEND_DIR"
  if ! mysql -uroot -e 'USE petav3_testing' 2>/dev/null; then
    echo "✗ MySQL DB petav3_testing (phpunit.xml) is not reachable as root — backend tests skipped"; fail=1
  else
    step "vendor/bin/pint --test (changed files)"
    changed=$(git diff --name-only --diff-filter=ACMR HEAD -- '*.php'; git ls-files --others --exclude-standard -- '*.php')
    [ -n "$changed" ] && { echo "$changed" | xargs vendor/bin/pint --test || fail=1; } || echo "(no changed PHP files)"
    if [ "$backend" = all ]; then step "vendor/bin/phpunit"; vendor/bin/phpunit || fail=1
    else step "vendor/bin/phpunit --filter $backend"; vendor/bin/phpunit --filter "$backend" || fail=1; fi
  fi
fi
echo
if [ "$fail" = 0 ]; then echo "✅ gate clean"; else echo "❌ gate FAILED — fix before committing"; fi
exit "$fail"
