#!/bin/bash
# recover_staging.command — безопасное восстановление staging-локалки.
#
# Что делает (ТОЛЬКО для staging-службы, prod НЕ трогается):
#  1. launchctl kickstart -k для `com.chig1r.dolphin-manager-staging` —
#     перезапуск службы, если launchd говорит «not running» или процесс завис.
#  2. Ждём 5 сек, проверяем что /api/ping отвечает на 8766.
#  3. Выводим понятный результат (PASS/FAIL + следующие действия).
#
# Что НЕ делает (безопасность):
#  - НЕ переустанавливает (не затирает config.json/board/events/states).
#  - НЕ скачивает ничего из сети.
#  - НЕ меняет файлы (кроме логов которые пишутся самой службой при старте).
#  - НЕ трогает prod-плист `com.chig1r.dolphin-manager`.
#  - НЕ показывает секреты (api_key / токены) в выводе.
set +e
LABEL="com.chig1r.dolphin-manager-staging"
PORT=8766
UID_=$(id -u)
DM_DIR="$HOME/dolphin-manager-staging"

cyan()  { printf "\033[1;36m%s\033[0m\n" "$*"; }
green() { printf "\033[0;32m%s\033[0m\n" "$*"; }
red()   { printf "\033[0;31m%s\033[0m\n" "$*"; }
yellow(){ printf "\033[0;33m%s\033[0m\n" "$*"; }

echo
cyan "═════════════════════════════════════════════════════"
cyan "  Восстановление staging-локалки (safe, read-mostly)"
cyan "═════════════════════════════════════════════════════"
echo

if ! launchctl print "gui/$UID_/$LABEL" >/dev/null 2>&1; then
  red "  ✗ staging-плист ($LABEL) не найден в launchd"
  yellow "    Запусти установку: bash $DM_DIR/install_autostart_staging.command"
  echo
  exit 1
fi

green "  → staging-плист найден: $LABEL"
cyan  "  → пробую launchctl kickstart (безопасно, не удаляет файлы)"
launchctl kickstart -k "gui/$UID_/$LABEL" 2>/dev/null
rc=$?
if [ "$rc" -ne 0 ]; then
  yellow "    launchctl kickstart вернул код $rc — пробую bootout+bootstrap"
  PLIST="$HOME/Library/LaunchAgents/$LABEL.plist"
  if [ -f "$PLIST" ]; then
    launchctl bootout "gui/$UID_/$LABEL" 2>/dev/null
    sleep 1
    launchctl bootstrap "gui/$UID_" "$PLIST" 2>/dev/null && \
      launchctl kickstart -k "gui/$UID_/$LABEL" 2>/dev/null
  fi
fi

echo
cyan "  → жду 5 секунд пока launchd поднимет процесс…"
sleep 5

if curl -s -m 5 "http://127.0.0.1:$PORT/api/ping" 2>/dev/null | grep -q "dolphin-manager"; then
  resp=$(curl -s -m 5 "http://127.0.0.1:$PORT/api/ping")
  ver=$(echo "$resp" | python3 -I -c 'import json,sys; print(json.load(sys.stdin).get("version","?"))' 2>/dev/null || echo "?")
  echo
  green "  ✓ staging-локалка снова работает (version=$ver, порт $PORT)"
  echo
  cyan "  Что дальше:"
  echo "    • Открой https://staging.kabanwork.82-221-101-9.sslip.io/ → индикатор «Локалка» в шапке должен зеленеть ≤5 сек"
  echo "    • Если индикатор остался красным — запусти диагностику: bash $DM_DIR/diag_staging.command"
  exit 0
else
  echo
  red "  ✗ порт $PORT не отвечает после 5 секунд"
  echo
  yellow "  Возможные причины:"
  echo "    • Python-зависимости не доустановлены (запусти переустановку: bash $DM_DIR/install_autostart_staging.command)"
  echo "    • Порт $PORT занят другим процессом (lsof -ti tcp:$PORT -sTCP:LISTEN)"
  echo "    • Критическая ошибка в коде (посмотри $DM_DIR/logs/manager.err.log)"
  echo
  cyan "  Для полной диагностики: bash $DM_DIR/diag_staging.command"
  exit 2
fi
