#!/bin/bash
# ============================================================================
#  DETENER la V5 pixel (escáner, puerto 8773)
#  - Mata el supervisor (para que NO vuelva a relanzar el backend).
#  - Manda SIGTERM al backend -> detach LIMPIO de frida en W y E (sin huérfanos).
#  NO reinicia los móviles ni cierra el juego; solo para el software del escáner.
# ============================================================================
export PATH="/opt/homebrew/bin:/usr/bin:/bin:$PATH"
echo "==> Deteniendo V5 pixel (:8773)..."

# 1) Supervisor primero (si no, respawnearía el backend al matarlo)
if pgrep -f "supervise_pixel.sh" >/dev/null 2>&1; then
  pkill -f "supervise_pixel.sh" 2>/dev/null
  echo "    · supervisor detenido (ya no respawnea)."
else
  echo "    · (no había supervisor corriendo)"
fi

# 2) Backend: SIGTERM al proceso que escucha en :8773 (dispara el detach de frida)
PID=$(lsof -nP -iTCP:8773 -sTCP:LISTEN -t 2>/dev/null | head -1)
if [ -n "$PID" ]; then
  echo "    · SIGTERM al backend (PID $PID); esperando detach de W/E..."
  kill "$PID" 2>/dev/null
  for i in $(seq 1 15); do lsof -nP -iTCP:8773 -sTCP:LISTEN >/dev/null 2>&1 && sleep 1 || break; done
else
  echo "    · (no había backend en :8773)"
fi

# 3) Garantía: liberar el puerto si algo quedó colgado
if lsof -nP -iTCP:8773 -sTCP:LISTEN >/dev/null 2>&1; then
  echo "    · ⚠ el puerto 8773 sigue ocupado -> forzando cierre"
  lsof -ti:8773 2>/dev/null | xargs kill -9 2>/dev/null
  sleep 1
fi

# 4) Cerrar el JUEGO (Evony) en ambos Pixel. Refresco por-Pixel (disconnect+connect) por si la
#    conexion de red al Pixel esta stale, SIN tocar el servidor adb compartido (emuladores vecinos).
echo "    · cerrando Evony en los Pixel..."
# 2026-08-19: NADA de 'adb kill-server' aqui -> mataba el servidor adb COMPARTIDO del Mac y
# cortaba la sesion frida de los emuladores vecinos (app hibrida :8790, bots 6004/6006),
# reiniciandoles el juego. Refresco QUIRURGICO por-Pixel (disconnect+connect, no toca emuladores).
for dev in 192.168.0.30:5555 192.168.0.31:5555; do
  adb disconnect "$dev" >/dev/null 2>&1; sleep 1
  adb connect "$dev" >/dev/null 2>&1
  if [ "$(adb -s "$dev" get-state 2>/dev/null | tr -d '\r')" = "device" ]; then
    adb -s "$dev" shell am force-stop com.topgamesinc.evony >/dev/null 2>&1
    echo "        $dev: Evony cerrado."
  else
    echo "        $dev: ⚠ no accesible por adb (¿apagado/dormido?)."
  fi
done

echo ""
if lsof -nP -iTCP:8773 -sTCP:LISTEN >/dev/null 2>&1; then
  echo "==> ⚠ No se pudo liberar :8773. Revisa manualmente."
else
  echo "==> ✅ V5 DETENIDA (backend + juego cerrados)."
fi
echo ""
