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

PHP="/usr/local/opt/php@8.2/bin/php"
HOST="127.0.0.1"
PORT="8099"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
DOCROOT="$ROOT/public"
ROUTER="$DOCROOT/router.php"
PID_FILE="$ROOT/tmp/php-dev-server.pid"

mkdir -p "$ROOT/tmp"

stop() {
  if [[ -f "$PID_FILE" ]]; then
    local pid
    pid="$(cat "$PID_FILE")"
    if kill -0 "$pid" 2>/dev/null; then
      kill "$pid" && echo "Servidor detenido (PID $pid)"
    fi
    rm -f "$PID_FILE"
  else
    # fallback: matar por puerto
    local pid
    pid="$(lsof -nP -iTCP:$PORT -sTCP:LISTEN -t 2>/dev/null || true)"
    if [[ -n "$pid" ]]; then
      kill "$pid" && echo "Servidor detenido (PID $pid)"
    else
      echo "No hay servidor corriendo en :$PORT"
    fi
  fi
}

start() {
  echo "Iniciando servidor PHP 8.2 en http://$HOST:$PORT"
  # Calentar caché antes de iniciar (sin precompilar todos los templates Twig)
  "$PHP" -d memory_limit=256M "${ROOT}/bin/console" \
    cache:warmup --env=dev --no-optional-warmers -q 2>/dev/null || true
  PHP_CLI_SERVER_WORKERS=4 nohup "$PHP" -d memory_limit=512M -d opcache.enable=0 \
    -S "$HOST:$PORT" -t "$DOCROOT" "$ROUTER" \
    > "$ROOT/tmp/php-server.log" 2>&1 &
  echo $! > "$PID_FILE"
  echo "PID: $(cat "$PID_FILE") — log: tmp/php-server.log"
}

case "${1:-start}" in
  start)   start ;;
  stop)    stop ;;
  restart) stop; sleep 0.5; start ;;
  status)
    pid="$(lsof -nP -iTCP:$PORT -sTCP:LISTEN -t 2>/dev/null || true)"
    if [[ -n "$pid" ]]; then
      echo "Corriendo en :$PORT (PID $pid)"
    else
      echo "Detenido"
    fi
    ;;
  *)
    echo "Uso: $0 {start|stop|restart|status}" >&2
    exit 1
    ;;
esac
