#!/bin/bash
# enwatch: англоязычные AI-источники → сигнальный фильтр headless Claude → телеграм.
# База источников — подборка Kumar & Solo. Ежедневно: новое с прошлого прогона →
# Claude отбирает только значимое → пинг; нет нового/значимого — молчим.
# Кроссплатформенный (Mac launchd / Pi systemd): пути из .env, см. trendwatch.sh.
# Запуск: bash enwatch.sh [days]
set -u

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

set -a; source "$SCRIPT_DIR/.env"; set +a
VAULT="${TGSTAT_VAULT_ROOT:?В .env нет TGSTAT_VAULT_ROOT}"
LOG_DIR="${TRENDWATCH_DATA_DIR:-$HOME/Library/Application Support/tgstat-puller}"
LOG="$LOG_DIR/enwatch.log"
CLAUDE_BIN="${CLAUDE_BIN:-$(command -v claude)}"
mkdir -p "$LOG_DIR"

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG"; }

if [ -z "${TELEGRAM_BOT_TOKEN:-}" ] || [ -z "${TELEGRAM_OWNER_USER_ID:-}" ]; then
  log "ERROR: нет токена/chat_id в .env"; exit 1
fi

DAYS="${1:-2}"
log "start: окно $DAYS дн."

if [ "${TRENDWATCH_GIT_SYNC:-0}" = "1" ]; then
  # rebase --abort обязателен: без него неудавшийся rebase оставляет клон в
  # полуразобранном состоянии, и следом падают все, кто тянет волт после.
  if ! git -C "$VAULT" pull --rebase >> "$LOG" 2>&1; then
    git -C "$VAULT" rebase --abort >> "$LOG" 2>&1
    log "WARN: git pull --rebase не прошёл — откатил rebase, работаю на локальном состоянии волта"
  fi
fi

COLLECT_OUT=$("$SCRIPT_DIR/venv/bin/python" "$SCRIPT_DIR/sources_watch.py" --days "$DAYS" 2>>"$LOG")
RC=$?
DIGEST=$(echo "$COLLECT_OUT" | grep '^DIGEST=' | cut -d= -f2-)
HAS_NEW=$(echo "$COLLECT_OUT" | grep '^HAS_NEW=' | cut -d= -f2-)
if [ $RC -ne 0 ]; then
  log "ERROR: сбор не удался (rc=$RC)"
  exit 1
fi

push_vault() {
  if [ "${TRENDWATCH_GIT_SYNC:-0}" = "1" ]; then
    git -C "$VAULT" add "projects/channel/trendwatching" >> "$LOG" 2>&1
    git -C "$VAULT" commit -m "enwatch: авто-сигналы $(date +%Y-%m-%d)" >> "$LOG" 2>&1 \
      && git -C "$VAULT" push >> "$LOG" 2>&1 || log "WARN: git push не прошёл"
  fi
}

if [ "$HAS_NEW" != "1" ] || [ -z "$DIGEST" ] || [ ! -f "$DIGEST" ]; then
  log "нового нет — молчим"
  exit 0
fi
log "digest: $DIGEST"

DIGEST_REL="${DIGEST#"$VAULT"/}"
TODAY=$(date +%Y-%m-%d)
PROMPT=$(python3 - "$SCRIPT_DIR/enwatch-signals-prompt.md" <<PYEOF
import sys
tpl = open(sys.argv[1]).read()
print(tpl.replace('{{TODAY}}', '$TODAY').replace('{{DIGEST}}', '''$DIGEST_REL'''))
PYEOF
)

SUMMARY_FILE=$(mktemp)
cd "$VAULT" || { log "ERROR: волт недоступен"; exit 1; }
"$CLAUDE_BIN" -p "$PROMPT" \
  --model claude-haiku-4-5-20251001 \
  --permission-mode acceptEdits \
  --output-format text \
  > "$SUMMARY_FILE" 2>>"$LOG"
RC=$?

SUMMARY=$(cat "$SUMMARY_FILE"); rm -f "$SUMMARY_FILE"

if [ $RC -ne 0 ] || [ -z "$SUMMARY" ]; then
  log "ERROR: claude rc=$RC, ответ пустой — ничего не шлём"
  push_vault
  exit 1
fi

if echo "$SUMMARY" | head -1 | grep -q "NO_SIGNALS"; then
  log "claude: значимого нет — молчим"
  push_vault
  exit 0
fi

TG="https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN"
SEND_RC=$(curl -s -o /dev/null -w '%{http_code}' -X POST "$TG/sendMessage" \
  --data-urlencode "chat_id=$TELEGRAM_OWNER_USER_ID" \
  --data-urlencode "text=$SUMMARY")
log "sendMessage: HTTP $SEND_RC"
push_vault
log "done"
