#!/usr/bin/env bash
# Recover COMPLETO del escáner Pixel V4 (:8773) — 2026-08-07.
# Para cuando un reinicio "suave" (respawn del backend) NO basta: p.ej. una mitad queda WEDGED en
# create_script (timeout 4x -> frida-server fresco + reattach -> vuelve a fallar en bucle) porque el
# JUEGO en ese Pixel está atascado (popup/CPU). Aquí se hace reset a NIVEL DE DISPOSITIVO:
#   1) para supervisor + backend (+ libera :8773)
#   2) en LOS 2 Pixel del escáner: force-stop Evony + frida-server FRESCO + relanzar Evony
#   3) espera cold-load de Evony
#   4) relanza el supervisor (backend fresco -> reinyecta agent_W.js/agent_E.js nuevos)
# SOLO toca los Pixel del escáner (33201JEHN00951 / 32241JEHN24574). Los bots (emuladores 6004/6006 +
# físico 192.168.0.22) NO se tocan.
set -u
HERE="$(cd "$(dirname "$0")" && pwd)"
PKG="com.topgamesinc.evony"
ACT="com.topgamesinc.evony/com.topgamesinc.androidplugin.UnityActivity"
FS="/data/local/tmp/frida-server"
PORT=8773
W="${SCANNER_W:-33201JEHN00951}"; E="${SCANNER_E:-32241JEHN24574}"
COLD="${COLD:-40}"
export PATH="/opt/homebrew/bin:/usr/bin:/bin:$PATH"
ts(){ date '+%F %T'; }

echo "=== [recover $(ts)] parando supervisor + backend ==="
pkill -f supervise_pixel.sh 2>/dev/null || true
sleep 2
lsof -ti :$PORT 2>/dev/null | xargs kill -9 2>/dev/null || true
sleep 2

echo "=== [recover] reset de dispositivo en los 2 Pixel (force-stop Evony + frida-server FRESCO) ==="
for d in "$W" "$E"; do
  adb -s "$d" shell am force-stop "$PKG" >/dev/null 2>&1 || true
  adb -s "$d" shell "su -c 'pkill -f frida-server'" >/dev/null 2>&1 || true
  sleep 1
  adb -s "$d" shell "su -c 'setsid $FS </dev/null >/dev/null 2>&1 &'" >/dev/null 2>&1 || true
  adb -s "$d" shell input keyevent KEYCODE_WAKEUP >/dev/null 2>&1 || true
  adb -s "$d" shell am start -n "$ACT" >/dev/null 2>&1 || true
  FSUP=$(adb -s "$d" shell "su -c 'netstat -anl 2>/dev/null | grep :27042 | grep LISTEN'" 2>/dev/null | tr -d '\r')
  echo "  $d: Evony relanzada | frida-server: $([ -n "$FSUP" ] && echo LISTEN || echo '(arrancando)')"
done

echo "=== [recover] esperando ${COLD}s a cold-load de Evony ==="
sleep "$COLD"

echo "=== [recover] arrancando supervisor (backend fresco + agentes nuevos) ==="
nohup bash "$HERE/supervise_pixel.sh" >>/tmp/evony_pixel_supervisor.out 2>&1 &
echo "  supervisor PID: $!"
sleep 8
BK=$(lsof -tnP -iTCP:$PORT -sTCP:LISTEN 2>/dev/null | head -1)
echo "  backend :$PORT -> $([ -n "$BK" ] && echo "LISTEN pid=$BK" || echo 'aún arrancando')"
echo "=== [recover $(ts)] DONE ==="
