#!/bin/bash
# Вечерняя проверка логина Claude на Пи.
#
# Headless Claude здесь живёт на интерактивном логине, и он уже протухал
# (24.07.2026 — «Not logged in»). На нём висят все ночные и утренние
# прогоны: утро (08:15), трендвотч, enwatch, mars-trendwatch, планёрка.
#
# Утренний прогон логин проверяет и сам, но толку от этого ровно столько,
# чтобы не молчать: если логин протух, утро уже потеряно — блок уедет без
# сверки со свежим. Поэтому вторая линия здесь, с вечера: спросить дёшево
# (одно слово), и если ответа нет — сказать так, чтобы починка занимала
# одну команду, а не расследование.
#
# Запуск: bash login-ping.sh   (systemd login-ping.timer, 21:00 Екб)
set -u

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
set -a; source "$SCRIPT_DIR/.env"; set +a

LOG_DIR="${PLANNER_DATA_DIR:-$HOME/content-planner-data}"
LOG="$LOG_DIR/login-ping.log"
VAULT="${VAULT_ROOT:-$HOME/obsidian-vault}"
NOTIFY_PREFIX="логин Claude"
CLAUDE_BIN="${CLAUDE_BIN:-$(command -v claude)}"
mkdir -p "$LOG_DIR"

source "$SCRIPT_DIR/lib.sh"

TIMEOUT_BIN="$(command -v timeout || command -v gtimeout || true)"

if [ -z "$CLAUDE_BIN" ] || [ ! -x "$CLAUDE_BIN" ]; then
  log "ERROR: claude не найден ($CLAUDE_BIN)"
  tg_notify "claude не найден на Пи — утренний прогон завтра уйдёт без сверки" "ping-bin"
  exit 0
fi

# Из каталога скрипта, а не из волта: в волте лежит большой CLAUDE.md, и
# подтягивать его ради одного слова — платить за пробу впятеро. Та же
# причина, что и у пробы внутри morning.sh.
OUT=$(cd "$SCRIPT_DIR" && ${TIMEOUT_BIN:+$TIMEOUT_BIN 90} "$CLAUDE_BIN" \
  --model claude-haiku-4-5-20251001 -p 'ответь одним словом: ok' --output-format text 2>&1)
RC=$?

if [ "$RC" -eq 0 ]; then
  log "ok: логин жив ($(printf '%s' "$OUT" | head -c 40))"
  exit 0
fi

log "WARN: проба не прошла (rc=$RC): $(printf '%s' "$OUT" | head -n 2 | tr '\n' ' ')"

# Отличаем протухший логин от «сеть моргнула»: чинятся они по-разному, и
# ежевечерний алерт про моргнувшую сеть быстро научит не читать алерты.
# Ключи дедупа разные по той же причине.
if printf '%s' "$OUT" | grep -qiE 'authenticat|invalid api key|oauth|/login|not logged in|401'; then
  tg_notify "протух — почини сегодня, иначе завтрашнее утро уйдёт без сверки со свежим:
ssh pi
claude /login
На нём же висят трендвотч, enwatch и воскресная планёрка." "ping-login"
else
  tg_notify "проба не прошла (rc=$RC), но на протухший логин не похоже — возможно, сеть. Если повторится завтра, смотри ~/content-planner-data/login-ping.log" "ping-other"
fi
exit 0
