#!/usr/bin/env bash
# Bootstrap Navi locally. Run from the repo root.
#
#   chmod +x bin/bootstrap.sh
#   ./bin/bootstrap.sh
#
# Prereqs: Node 20+, pnpm 9+, Docker.

set -euo pipefail

ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT_DIR"

echo "→ Step 1/7: Verifying tooling…"
if ! command -v pnpm >/dev/null; then
  command -v corepack >/dev/null || { echo "Install pnpm first: npm i -g pnpm@9"; exit 1; }
  mkdir -p "$ROOT_DIR/.bootstrap-bin"
  cat > "$ROOT_DIR/.bootstrap-bin/pnpm" <<'SH'
#!/usr/bin/env sh
exec corepack pnpm "$@"
SH
  chmod +x "$ROOT_DIR/.bootstrap-bin/pnpm"
  export PATH="$ROOT_DIR/.bootstrap-bin:$PATH"
fi
pnpm --version
command -v docker >/dev/null || { echo "Docker is required for local Postgres + Redis."; exit 1; }
node --version

echo "→ Step 2/7: Seeding env files from .env.example…"
[ -f .env ] || cp .env.example .env
for app in api dashboard website mobile; do
  [ -f "apps/$app/.env" ] || cp "apps/$app/.env.example" "apps/$app/.env"
done

echo "→ Step 3/7: Starting Postgres + Redis + Mailpit (docker compose)…"
docker compose up -d postgres redis mailpit

echo "→ Step 4/7: Installing workspace dependencies…"
pnpm install

echo "→ Step 5/7: Generating Prisma client + syncing local database…"
pnpm --filter @navi/api prisma:generate
pnpm --filter @navi/api exec prisma db push

echo "→ Step 6/7: Seeding UAE data…"
pnpm --filter @navi/api prisma:seed

echo "→ Step 7/7: Quality gates…"
pnpm typecheck
pnpm lint
pnpm test
pnpm build

cat <<'EOF'

✓ Setup complete.

Run apps in separate terminals:
  pnpm --filter @navi/api dev          # http://localhost:4000/v1
  pnpm --filter @navi/dashboard dev    # http://localhost:3001
  pnpm --filter @navi/website dev      # http://localhost:3000
  pnpm --filter @navi/mobile start     # press i / a / w

Health check:
  curl http://localhost:4000/v1/health

Free local email inbox:
  http://localhost:8025

EOF
