#!/bin/bash
set -euo pipefail

REPO_ROOT=$(git rev-parse --show-toplevel)
cd "$REPO_ROOT"

echo "🔍 [Pre-push] Running quality gate..."

echo ""
echo "[1/4] 🦀 cargo fmt --check..."
if cargo fmt --check; then
  echo "    ✓ formatting OK"
else
  echo "❌ Run 'cargo fmt' before pushing."
  exit 1
fi

echo ""
echo "[2/4] 🦀 cargo clippy..."
if cargo clippy --all-targets --all-features --quiet -- -D warnings; then
  echo "    ✓ clippy OK"
else
  echo "❌ Clippy errors. Fix before pushing."
  exit 1
fi

echo ""
echo "[3/4] 🧪 cargo test..."
if cargo test --quiet; then
  echo "    ✓ tests OK"
else
  echo "❌ Tests failed!"
  exit 1
fi

echo ""
echo "[4/4] 📦 cargo publish --dry-run..."
if cargo publish --dry-run --allow-dirty --quiet 2>/dev/null; then
  echo "    ✓ publish dry-run OK"
else
  echo "    ⚠️  publish dry-run skipped (may need login)"
fi

echo ""
echo "✅ Quality gate passed — push allowed."
