#!/bin/bash
set -e

# ============================================================
# Momira — Full Server Setup Script
# Run as: chmod +x setup.sh && ./setup.sh
# ============================================================

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

log()  { echo -e "${GREEN}[✓]${NC} $1"; }
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
err()  { echo -e "${RED}[✗]${NC} $1"; exit 1; }

echo ""
echo "╔══════════════════════════════════════════╗"
echo "║       Momira — Server Setup Script       ║"
echo "║       Firebase Project: arimage-f84ba    ║"
echo "╚══════════════════════════════════════════╝"
echo ""

# -----------------------------------------------------------
# 1. Check prerequisites
# -----------------------------------------------------------
echo "── Step 1: Checking prerequisites ──"

# Node.js 22+
if ! command -v node &>/dev/null; then
  warn "Node.js not found. Installing Node 22..."
  curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
  sudo apt install -y nodejs
fi

NODE_VER=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VER" -lt 22 ]; then
  err "Node.js 22+ required. Found: $(node -v). Run: sudo n 22 or nvm install 22"
fi
log "Node.js $(node -v)"

# npm
command -v npm &>/dev/null || err "npm not found"
log "npm $(npm -v)"

# git
command -v git &>/dev/null || { sudo apt install -y git; }
log "git $(git --version | cut -d' ' -f3)"

# -----------------------------------------------------------
# 2. Install Firebase CLI
# -----------------------------------------------------------
echo ""
echo "── Step 2: Firebase CLI ──"

if ! command -v firebase &>/dev/null; then
  npm install -g firebase-tools
fi
log "Firebase CLI $(firebase --version)"

# -----------------------------------------------------------
# 3. Firebase Authentication
# -----------------------------------------------------------
echo ""
echo "── Step 3: Firebase Login ──"

if ! firebase projects:list &>/dev/null 2>&1; then
  warn "Not logged in. Starting login..."
  firebase login --no-localhost
fi
log "Firebase authenticated"

# Verify project access
firebase projects:list 2>/dev/null | grep -q "arimage-f84ba" || err "No access to project arimage-f84ba"
log "Project arimage-f84ba accessible"

# -----------------------------------------------------------
# 4. Determine project root
# -----------------------------------------------------------
echo ""
echo "── Step 4: Project files ──"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR"

if [ ! -d "$PROJECT_ROOT/web" ] || [ ! -d "$PROJECT_ROOT/backend" ]; then
  err "Cannot find web/ and backend/ directories. Run this script from the project root."
fi
log "Project root: $PROJECT_ROOT"

# -----------------------------------------------------------
# 5. Install Frontend dependencies
# -----------------------------------------------------------
echo ""
echo "── Step 5: Frontend (Next.js) ──"

cd "$PROJECT_ROOT/web"
npm install
log "Frontend dependencies installed"

# -----------------------------------------------------------
# 6. Install Backend dependencies
# -----------------------------------------------------------
echo ""
echo "── Step 6: Backend (Cloud Functions) ──"

cd "$PROJECT_ROOT/backend/functions"
npm install
log "Backend dependencies installed"

# -----------------------------------------------------------
# 7. Build Backend
# -----------------------------------------------------------
echo ""
echo "── Step 7: Build Cloud Functions ──"

cd "$PROJECT_ROOT/backend/functions"
npx tsc
log "Cloud Functions compiled"

# -----------------------------------------------------------
# 8. Deploy Cloud Functions
# -----------------------------------------------------------
echo ""
echo "── Step 8: Deploy Cloud Functions ──"

cd "$PROJECT_ROOT/backend"
firebase deploy --only functions
log "Cloud Functions deployed"

# -----------------------------------------------------------
# 9. Deploy Firestore & Storage Rules
# -----------------------------------------------------------
echo ""
echo "── Step 9: Deploy Security Rules ──"

cd "$PROJECT_ROOT/backend"
firebase deploy --only firestore:rules,storage:rules
log "Security rules deployed"

# -----------------------------------------------------------
# 10. Build Frontend
# -----------------------------------------------------------
echo ""
echo "── Step 10: Build Frontend ──"

cd "$PROJECT_ROOT/web"
npm run build
log "Frontend built"

# -----------------------------------------------------------
# 11. Optional: Deploy to Firebase Hosting
# -----------------------------------------------------------
echo ""
read -p "Deploy to Firebase Hosting? (y/N): " DEPLOY_HOSTING
if [[ "$DEPLOY_HOSTING" =~ ^[Yy]$ ]]; then
  cd "$PROJECT_ROOT/backend"
  firebase deploy --only hosting
  log "Hosting deployed"
else
  warn "Skipped hosting deploy. Run manually: cd backend && firebase deploy --only hosting"
fi

# -----------------------------------------------------------
# 12. Optional: Start with PM2
# -----------------------------------------------------------
echo ""
read -p "Start production server with PM2? (y/N): " USE_PM2
if [[ "$USE_PM2" =~ ^[Yy]$ ]]; then
  if ! command -v pm2 &>/dev/null; then
    npm install -g pm2
  fi
  cd "$PROJECT_ROOT/web"
  pm2 delete momira 2>/dev/null || true
  pm2 start npm --name "momira" -- start -- -p 3000
  pm2 save
  log "PM2 started on port 3000"
fi

# -----------------------------------------------------------
# Done
# -----------------------------------------------------------
echo ""
echo "╔══════════════════════════════════════════╗"
echo "║          ✓ Setup Complete!               ║"
echo "╚══════════════════════════════════════════╝"
echo ""
echo "  Project:  arimage-f84ba"
echo "  Domain:   momira.app"
echo "  Frontend: $PROJECT_ROOT/web"
echo "  Backend:  $PROJECT_ROOT/backend"
echo ""
echo "  Quick commands:"
echo "    Dev:     cd web && npm run dev"
echo "    Build:   cd web && npm run build"
echo "    Deploy:  cd backend && firebase deploy"
echo "    Logs:    cd backend && firebase functions:log"
echo ""
echo "  Admin setup:"
echo "    1. Open https://momira.app/admin/setup"
echo "    2. Login → Click 'Make me admin'"
echo "    3. Go to /admin → System tab → Set Stripe keys"
echo ""
