#!/usr/bin/env bash
set -uo pipefail

status=0
root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
python_files=(
  "app.py"
  "app_dependencies.py"
  "card_store.py"
  "inbox_service.py"
  "message_pipeline.py"
  "nanobot_api_client.py"
  "route_helpers.py"
  "rtc_manager.py"
  "session_store.py"
  "tool_job_service.py"
  "ui_event_bus.py"
  "web_runtime.py"
  "workbench_store.py"
  "routes"
)

run_check() {
  local label="$1"
  shift

  echo "==> ${label}"
  if ! "$@"; then
    status=1
  fi
  echo
}

cd "${root_dir}"

run_check \
  "Ruff format" \
  uv run --with "ruff>=0.15.0,<1.0.0" \
  ruff format --check "${python_files[@]}"
run_check \
  "Ruff lint" \
  uv run --with "ruff>=0.15.0,<1.0.0" \
  ruff check "${python_files[@]}"
run_check \
  "Deptry" \
  uv run --with "deptry>=0.24.0,<1.0.0" \
  deptry . \
  --requirements-files requirements.txt \
  --known-first-party app,card_store,supertonic_gateway,sync_card_templates,voice_rtc,wisper \
  --per-rule-ignores DEP002=uvicorn \
  --extend-exclude ".*/frontend/.*" \
  --extend-exclude ".*/\\.venv/.*" \
  --extend-exclude ".*/__pycache__/.*"
run_check \
  "Vulture" \
  uv run --with "vulture>=2.15,<3.0.0" \
  vulture "${python_files[@]}" --min-confidence 80
run_check \
  "Card Runtime" \
  python3 scripts/check_card_runtime.py
run_check \
  "Card Runtime Fixture" \
  node scripts/check_card_runtime_fixture.mjs
run_check \
  "Backend Tests" \
  .venv/bin/python -m unittest discover -s tests -p "test_*.py"

exit "${status}"
