#!/usr/bin/env bash
# =============================================================================
# VarejoTech — Segundo Cérebro · VPS: sincronizar a inbox e instalar a higiene
# -----------------------------------------------------------------------------
# Roda NA VPS (onde o Hermes está instalado). Faz três coisas:
#
#   1. Ensina o backup automático (cerebro-sync) a subir a pasta inbox/.
#      SEM ISTO, tudo que o agente capturar na caixa de entrada fica preso no
#      servidor e nunca chega ao GitHub nem ao seu computador.
#   2. Instala o verificador de higiene do cérebro.
#   3. Cria dois crons: o placar diário e a revisão semanal.
#
# Seguro: faz backup de tudo que edita, confere a sintaxe antes de trocar,
# e pode rodar quantas vezes quiser.
#
# Uso:  bash vps-setup.sh
# =============================================================================
set -uo pipefail

BASE_URL="${BASE_URL:-https://varejotech-segundo-cerebro.pages.dev/d}"
CEREBRO="${CEREBRO:-/root}"
HSCRIPTS="$HOME/.hermes/scripts"
SYNC="$HSCRIPTS/cerebro-sync.sh"
STAMP="$(date +%Y%m%d-%H%M%S)"

say()  { printf '\n\033[1;34m▸ %s\033[0m\n' "$*"; }
ok()   { printf '  \033[0;32m✓\033[0m %s\n' "$*"; }
warn() { printf '  \033[0;33m!\033[0m %s\n' "$*"; }
die()  { printf '\n\033[0;31m✗ %s\033[0m\n\n' "$*"; exit 1; }

echo
echo "=========================================================="
echo " Segundo Cérebro · VPS — inbox no backup + higiene"
echo "=========================================================="

command -v hermes >/dev/null 2>&1 || die "Não achei o comando 'hermes'. Este script roda na VPS."
[ -d "$CEREBRO/.git" ] || die "Não achei o cérebro em $CEREBRO."

# --- 1. inbox/ existe? --------------------------------------------------------
say "Caixa de entrada"
mkdir -p "$CEREBRO/inbox"
[ -f "$CEREBRO/inbox/.gitkeep" ] || touch "$CEREBRO/inbox/.gitkeep"
ok "$CEREBRO/inbox/"

# --- 2. patch do cerebro-sync -------------------------------------------------
say "Ensinando o backup automático a subir a inbox/"
if [ ! -f "$SYNC" ]; then
  warn "não achei $SYNC — pulei esta parte (confira o nome do script do seu cron de sync)"
else
  if grep -qE '^for p in .*\binbox\b' "$SYNC"; then
    ok "o backup já inclui a inbox/ — nada a fazer"
  else
    cp "$SYNC" "$SYNC.bak.$STAMP"
    ok "backup: $SYNC.bak.$STAMP"
    tmp="$(mktemp)"
    sed -E 's|^for p in (memory)|for p in inbox \1|' "$SYNC" > "$tmp"
    if ! grep -qE '^for p in .*\binbox\b' "$tmp"; then
      rm -f "$tmp"
      die "não consegui encontrar a linha da lista de pastas em $SYNC. Edite à mão: acrescente 'inbox' na linha que começa com 'for p in'."
    fi
    bash -n "$tmp" || { rm -f "$tmp"; die "o arquivo editado ficou com erro de sintaxe — nada foi trocado."; }
    cat "$tmp" > "$SYNC"; rm -f "$tmp"
    ok "inbox/ entrou na lista de pastas do backup"
    grep -E '^for p in' "$SYNC" | sed 's/^/     /'
  fi
fi

# --- 3. verificador de higiene ------------------------------------------------
say "Instalando o verificador de higiene"
mkdir -p "$HSCRIPTS"
curl -fsSL "$BASE_URL/mapear-contexto.py" -o "$HSCRIPTS/mapear-contexto.py" \
  || die "não consegui baixar o verificador — sem internet?"
python3 -c "compile(open('$HSCRIPTS/mapear-contexto.py',encoding='utf-8').read(),'x','exec')" \
  || die "o verificador baixou corrompido. Rode de novo."
ok "mapear-contexto.py"

cat > "$HSCRIPTS/higiene-cerebro.sh" <<EOF
#!/usr/bin/env bash
# Placar de higiene do cérebro. Silencioso quando está tudo em ordem —
# saída vazia = o Hermes não manda mensagem.
exec python3 "$HSCRIPTS/mapear-contexto.py" --resumo "$CEREBRO"
EOF
chmod +x "$HSCRIPTS/higiene-cerebro.sh"
ok "higiene-cerebro.sh"

echo "  Teste agora:"
bash "$HSCRIPTS/higiene-cerebro.sh" | sed 's/^/     /' || true

# --- 4. crons -----------------------------------------------------------------
say "Criando os crons"
CRONS="$(hermes cron list 2>/dev/null || echo '')"

# reaproveita o destino de entrega do cron de sync que já existe
DELIVER="$(printf '%s' "$CRONS" | grep -oE 'telegram:[0-9]+' | head -1)"
if [ -z "$DELIVER" ]; then
  warn "não descobri o destino das mensagens; vou usar 'origin' (responde onde você falar com o agente)"
  DELIVER="origin"
else
  ok "mensagens vão para $DELIVER"
fi

criar_cron() { # criar_cron <nome> <agendamento> [prompt] [flags...]
  local nome="$1"; shift
  if printf '%s' "$CRONS" | grep -q "Name: *$nome"; then
    ok "$nome já existe — não mexi nele"
    return
  fi
  local saida
  if saida="$(hermes cron create "$@" --name "$nome" --deliver "$DELIVER" 2>&1)"; then
    ok "$nome criado"
  else
    warn "não consegui criar $nome:"
    printf '%s\n' "$saida" | sed 's/^/       /'
  fi
}

criar_cron "higiene-cerebro" "0 11 * * *" \
  --script higiene-cerebro.sh --no-agent --workdir "$CEREBRO"

criar_cron "revisao-semanal" "0 21 * * 0" \
  "Faça a revisão semanal do cérebro, SEM escrever em nenhum arquivo. Leia inbox/ (o que está esperando curadoria), memory/context/pendencias.md e memory/hot.md. Responda em no máximo 6 linhas: (1) quantos itens esperam curadoria e há quanto tempo, (2) as pendências que passaram do prazo, (3) o que mudou no cérebro nesta semana. Se não houver nada relevante, responda apenas 'cérebro em dia'." \
  --workdir "$CEREBRO"

say "Crons ativos agora"
hermes cron list 2>/dev/null | grep -E "Name:|Schedule:|Next run:" | sed 's/^/  /'

echo
echo "=========================================================="
echo " ✓ VPS pronta."
echo
echo "   Se algum cron não foi criado, rode à mão:"
echo "     hermes cron create \"0 11 * * *\" --name higiene-cerebro \\"
echo "       --script higiene-cerebro.sh --no-agent --workdir $CEREBRO --deliver $DELIVER"
echo
echo "   Confira que a inbox sobe: crie um arquivo de teste, espere o sync"
echo "   (até 30 min) e veja se ele aparece no GitHub."
echo "=========================================================="
echo
