#!/usr/bin/env bash
# bot_v1 — LEVANTA TODO de una vez:
#   emulador 6004 (con ventana) desde el snapshot 'bot_ready' + frida-server (root) + backend.
# Uso:  cd bot_v1 && ./start_bot.sh      -> luego abre http://127.0.0.1:8780
# (no usa set -e a propósito: es best-effort, continúa aunque un paso devuelva error menor)
HERE="$(cd "$(dirname "$0")" && pwd)"
EMU="/opt/homebrew/share/android-commandlinetools/emulator/emulator"
AVD="evony_bot_1"; PORT=6004; SNAP="bot_ready"; D="emulator-$PORT"
FS_BIN="/Users/danicosta/Desktop/Evony/evony-scout-v3-research/frida-server-17.9.10-android-arm64"
PKG="com.topgamesinc.evony"
log(){ echo "[start] $*"; }

# 1) Emulador con ventana desde snapshot (si no está ya arrancado)
if [ "$(adb -s $D get-state 2>/dev/null | tr -d '\r')" = "device" ]; then
  log "6004 ya está arrancado."
else
  # BAJO CONSUMO (default): headless + GPU host offscreen (Metal). Probado en V3: swiftshader
  # (render software en CPU) atraganta este Mac; -gpu host headless NO se cuelga. Para
  # interacción manual (re-login en Evony, captcha):  LOWPOWER=0 bash start_bot.sh  -> con ventana.
  if [ "${LOWPOWER:-1}" = "1" ]; then EXTRA="-no-window -gpu host -no-audio"; MODE="HEADLESS lowpower"; else EXTRA="-gpu host -no-audio"; MODE="CON VENTANA"; fi
  # COLD BOOT (sin -snapshot): restaurar el snapshot 'bot_ready' con los 2 emuladores V3 (-gpu host) corriendo FALLA con
  # "EGL_NO_CONTEXT" al recrear el framebuffer guardado -> qemu crashea ("se ha cerrado inesperadamente"). El cold boot
  # necesita muchos menos contextos GPU y arranca OK; Evony auto-loguea desde disco y el backend navega (autoWM cold start).
  bash "$HERE/set_avd_size.sh" "$AVD" full   # ORIGINAL: AVD full (6GB/4c/1080) antes del cold boot (revierte si se corrió bot_lite)
  rm -rf "$HOME/.android/avd/$AVD.avd/"*.lock 2>/dev/null   # limpiar locks obsoletos de crashes previos (bloquean el arranque)
  log "lanzando 6004 ($MODE) COLD BOOT — el snapshot NO restaura con los V3 corriendo (GPU)..."
  nohup "$EMU" -avd "$AVD" -port $PORT -no-snapshot-load -no-snapshot-save \
        -no-boot-anim $EXTRA > /tmp/evony_bot_6004.log 2>&1 &
  disown
  log "esperando a que el dispositivo esté online..."
  for i in $(seq 1 60); do
    [ "$(adb -s $D get-state 2>/dev/null | tr -d '\r')" = "device" ] && break
    sleep 2
  done
fi
for i in $(seq 1 90); do
  [ "$(adb -s $D shell getprop sys.boot_completed 2>/dev/null | tr -d '\r')" = "1" ] && break
  sleep 2
done
log "online (boot_completed=$(adb -s $D shell getprop sys.boot_completed 2>/dev/null | tr -d '\r'))"

# 2) frida-server: push si falta + arrancar como root si no escucha en :27042
has=$(adb -s $D shell "ls /data/local/tmp/frida-server 2>/dev/null" | tr -d '\r')
if [ -z "$has" ]; then
  log "frida-server no está en /data/local/tmp -> push..."
  adb -s $D push "$FS_BIN" /data/local/tmp/frida-server >/dev/null 2>&1
  adb -s $D shell "su -c 'chmod 755 /data/local/tmp/frida-server'" >/dev/null 2>&1
fi
listen=$(adb -s $D shell "su -c 'netstat -anl 2>/dev/null | grep \":27042 \" | grep LISTEN'" 2>&1 | head -1)
if echo "$listen" | grep -q LISTEN; then
  log "frida-server ya escucha :27042."
else
  log "arrancando frida-server (setsid, root)..."
  adb -s $D shell "su -c 'pkill -9 -f /data/local/tmp/frida-server 2>/dev/null'" >/dev/null 2>&1
  sleep 2
  adb -s $D shell "su -c 'setsid /data/local/tmp/frida-server </dev/null >/dev/null 2>&1 &'" >/dev/null 2>&1
  sleep 3
fi

# 3) Backend (el propio backend lanza Evony en 6004 y attacha el agente)
log "arrancando backend bot_v1..."
bash "$HERE/run_bot.sh"
echo
log "LISTO ✅  ->  http://127.0.0.1:8780   (emulador 6004 con ventana)"
log "      el agente tarda ~10s en engancharse tras arrancar; pulsa ↻ en la UI si la cuenta no aparece."
