#!/usr/bin/env bash
# Husky-compatible pre-push hook
# Runs lint, typecheck, format checks, and coverage enforcement.
# Install: copy to .husky/pre-push and chmod +x
set -e

echo "▶ Running pre-push checks..."

# --- Kill stale test runners ---
echo "  ✓ Kill stale test runners"
pkill -f vitest 2>/dev/null || true
pkill -f jest 2>/dev/null || true

# --- Lint ---
echo "  ✓ Lint"
if command -v pnpm &>/dev/null && [ -f package.json ]; then
  pnpm lint 2>/dev/null || npm run lint
elif command -v npm &>/dev/null && [ -f package.json ]; then
  npm run lint
fi

# --- Typecheck ---
echo "  ✓ Typecheck"
if command -v pnpm &>/dev/null && [ -f package.json ]; then
  pnpm typecheck 2>/dev/null || npm run typecheck 2>/dev/null || true
elif command -v npm &>/dev/null && [ -f package.json ]; then
  npm run typecheck 2>/dev/null || true
fi

# --- Format ---
echo "  ✓ Format check"
if command -v pnpm &>/dev/null && [ -f package.json ]; then
  pnpm format:check 2>/dev/null || pnpm prettier --check . 2>/dev/null || true
elif command -v npm &>/dev/null && [ -f package.json ]; then
  npm run format:check 2>/dev/null || npx prettier --check . 2>/dev/null || true
fi

# --- Coverage enforcement ---
if [ -f .coverage-thresholds.json ]; then
  echo "  ✓ Coverage enforcement (.coverage-thresholds.json found)"

  # Try jq first, fall back to node
  if command -v jq &>/dev/null; then
    CMD=$(jq -r '.enforcement.command' .coverage-thresholds.json)
  else
    CMD=$(node -e "console.log(JSON.parse(require('fs').readFileSync('.coverage-thresholds.json','utf-8')).enforcement.command)")
  fi

  if [ -z "$CMD" ] || [ "$CMD" = "null" ]; then
    echo "    ⚠ No enforcement.command in .coverage-thresholds.json — skipping"
  else
    echo "    Running: $CMD"
    eval "$CMD"
  fi
else
  echo "  · No .coverage-thresholds.json — skipping coverage enforcement"
fi

echo "▶ Pre-push checks passed."
