#!/bin/bash
# ChatApp - Script de arranque completo
# Inicia: Docker servicios, API, WebSocket, Frontend, Workers

set -e

echo "=== ChatApp Start ==="

# 1. Docker services
echo "Starting Docker services..."
cd /root/chatapp && docker compose up -d
sleep 3

# 2. Wait for PostgreSQL
echo "Waiting for PostgreSQL..."
for i in $(seq 1 30); do
  if docker exec chatapp-postgres pg_isready -U chatapp > /dev/null 2>&1; then
    echo "PostgreSQL ready"
    break
  fi
  sleep 1
done

# 3. Prisma
echo "Generating Prisma client..."
cd /root/chatapp/backend/libs/database && npx prisma generate
echo "Pushing schema to DB..."
npx prisma db push --accept-data-loss

# 4. Seed
echo "Running seed..."
npx prisma db seed || true

# 5. API
echo "Starting API on port 3010..."
cd /root/chatapp/backend/apps/api
DOTENV_CONFIG_PATH=../../.env API_PORT=3010 npx ts-node -r tsconfig-paths/register -r dotenv/config src/main.ts &
API_PID=$!
sleep 3

# 6. WebSocket
echo "Starting WebSocket on port 3002..."
cd /root/chatapp/backend/apps/realtime
DOTENV_CONFIG_PATH=../../.env WS_PORT=3002 npx ts-node -r tsconfig-paths/register -r dotenv/config src/main.ts &
WS_PID=$!
sleep 2

# 7. Frontend
echo "Starting Frontend on port 3001..."
cd /root/chatapp/frontend && npx next dev -p 3001 &
FE_PID=$!
sleep 3

# 8. Workers
echo "Starting Workers..."
cd /root/chatapp/backend/apps/workers
DOTENV_CONFIG_PATH=../../.env npx ts-node -r tsconfig-paths/register -r dotenv/config src/main.ts &
WK_PID=$!

echo ""
echo "=== All services started ==="
echo "API:         http://localhost:3010"
echo "WebSocket:   ws://localhost:3002"
echo "Frontend:    http://localhost:3001"
echo "Swagger:     http://localhost:3010/docs"
echo ""
echo "PIDs: API=$API_PID WS=$WS_PID FE=$FE_PID WORKERS=$WK_PID"
echo "Press Ctrl+C to stop all"

trap "kill $API_PID $WS_PID $FE_PID $WK_PID 2>/dev/null; exit" INT TERM
wait