#!/usr/bin/env bash
# =============================================================================
#  Agency PM — Local Development Setup  (macOS / Linux)
#  Usage:  bash scripts/setup-local.sh
# =============================================================================
set -e

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m'
info()    { echo -e "${CYAN}[INFO]${NC}  $*"; }
success() { echo -e "${GREEN}[OK]${NC}    $*"; }
warn()    { echo -e "${YELLOW}[WARN]${NC}  $*"; }
ok_or_warn() { command -v "$1" &>/dev/null && success "$1 found" || warn "$1 not found — please install it first"; }

echo -e "${BOLD}${CYAN}"
echo "  ┌─────────────────────────────────────────┐"
echo "  │   Agency PM — Local Dev Setup           │"
echo "  └─────────────────────────────────────────┘"
echo -e "${NC}"

# ── Check prerequisites ───────────────────────────────────────────────────────
info "Checking prerequisites..."
ok_or_warn php
ok_or_warn composer
ok_or_warn node
ok_or_warn npm
ok_or_warn mysql
echo ""

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
BACKEND="${ROOT_DIR}/backend"
FRONTEND="${ROOT_DIR}/frontend"

# ── Backend ───────────────────────────────────────────────────────────────────
echo -e "${BOLD}── Backend (Laravel) ──────────────────────────────${NC}"
cd "${BACKEND}"

if [ ! -f .env ]; then
  cp .env.example .env
  info ".env created from .env.example"
  echo ""
  echo -e "${YELLOW}  Configure your database in backend/.env then press Enter to continue...${NC}"
  read -r
else
  info ".env already exists — skipping"
fi

info "Installing PHP dependencies..."
composer install --quiet

info "Generating application key..."
php artisan key:generate --ansi

info "Running migrations..."
read -rp "  Seed demo data? [y/N] " SEED
if [[ "$SEED" =~ ^[Yy]$ ]]; then
  php artisan migrate:fresh --seed
else
  php artisan migrate
fi

info "Creating storage symlink..."
php artisan storage:link 2>/dev/null || true

success "Backend ready  →  http://localhost:8000"

# ── Frontend ──────────────────────────────────────────────────────────────────
echo ""
echo -e "${BOLD}── Frontend (React / Vite) ────────────────────────${NC}"
cd "${FRONTEND}"

if [ ! -f .env ]; then
  cat > .env <<ENV
VITE_API_URL=http://localhost:8000/api/v1
ENV
  info ".env created for Vite"
fi

info "Installing Node dependencies..."
npm install --silent

success "Frontend ready  →  http://localhost:5173"

# ── Start servers ─────────────────────────────────────────────────────────────
echo ""
echo -e "${BOLD}── Starting Dev Servers ───────────────────────────${NC}"
echo -e "${YELLOW}  Press Ctrl+C to stop both servers.${NC}"
echo ""

# Start Laravel in background, trap exit to kill it
cd "${BACKEND}"
php artisan serve &
LARAVEL_PID=$!

cd "${FRONTEND}"
npm run dev &
VITE_PID=$!

trap "kill $LARAVEL_PID $VITE_PID 2>/dev/null; echo '  Servers stopped.'" EXIT INT TERM

echo ""
echo -e "${GREEN}${BOLD}  ✓ Agency PM running locally${NC}"
echo ""
echo -e "  🌐 App  → ${BOLD}http://localhost:5173${NC}"
echo -e "  🔌 API  → ${BOLD}http://localhost:8000/api/v1${NC}"
echo ""

wait
