#!/bin/bash
# marswatch: трендвотч Марса → сбор (collect.py) → headless Claude → чат контента.
# auto: вс — полный (7дн), остальные дни — сигналы (тихо, если пусто).
# Запуск: bash marswatch.sh [auto|full|signals]
set -u
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
set -a; source "$SCRIPT_DIR/.env"; set +a
VAULT="${MARSWATCH_VAULT_ROOT:?нет MARSWATCH_VAULT_ROOT в .env}"
LOG_DIR="${MARSWATCH_DATA_DIR:-$HOME/Library/Application Support/mars-trendwatch}"
LOG="$LOG_DIR/marswatch.log"
CLAUDE_BIN="${CLAUDE_BIN:-$(command -v claude)}"
PY="$SCRIPT_DIR/venv/bin/python"
mkdir -p "$LOG_DIR"
log() { echo "[$(date '+%F %T')] $*" >> "$LOG"; }

if [ -z "${TELEGRAM_BOT_TOKEN:-}" ] || [ -z "${TELEGRAM_CONTENT_CHAT_ID:-}" ]; then
  log "ERROR: нет токена/чата в .env"; exit 1
fi
TG="https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN"

MODE="${1:-auto}"
[ "$MODE" = "auto" ] && { [ "$(date +%u)" = "7" ] && MODE="full" || MODE="signals"; }
log "start: режим $MODE"

push_vault() {
  if [ "${MARSWATCH_GIT_SYNC:-0}" = "1" ]; then
    git -C "$VAULT" add "projects/mars/content/trendwatching" >> "$LOG" 2>&1
    git -C "$VAULT" commit -m "mars-trendwatch: авто $(date +%F)" >> "$LOG" 2>&1 \
      && git -C "$VAULT" push >> "$LOG" 2>&1 || log "WARN: git push не прошёл"
  fi
}

[ "${MARSWATCH_GIT_SYNC:-0}" = "1" ] && { git -C "$VAULT" pull --rebase >> "$LOG" 2>&1 || log "WARN: git pull"; }

EXTRA=""; [ "$MODE" = "signals" ] && EXTRA="--signals"
OUT=$("$PY" "$SCRIPT_DIR/collect.py" $EXTRA --vault "$VAULT" 2>>"$LOG")
DIGEST=$(echo "$OUT" | grep '^DIGEST=' | cut -d= -f2-)
HAS=$(echo "$OUT" | grep '^HAS_SIGNALS=' | cut -d= -f2-)
if [ -z "$DIGEST" ] || [ ! -f "$DIGEST" ]; then log "ERROR: сбор не удался"; exit 1; fi
log "digest: $DIGEST (has=$HAS)"

if [ "$HAS" != "1" ]; then log "сигналов нет — молчим"; push_vault; exit 0; fi

# --- headless Claude: читает сырой дайджест, пишет финал (или NO_SIGNALS)
DIGEST_REL="${DIGEST#"$VAULT"/}"
TODAY=$(date +%F)
PROMPT=$(python3 - "$SCRIPT_DIR/mars-prompt.md" <<PYEOF
import sys
t = open(sys.argv[1]).read()
print(t.replace('{{TODAY}}', '$TODAY').replace('{{DIGEST}}', '''$DIGEST_REL'''))
PYEOF
)
SUMMARY_FILE=$(mktemp)
cd "$VAULT" || { log "ERROR: волт недоступен"; exit 1; }
"$CLAUDE_BIN" -p "$PROMPT" --model claude-opus-5 --permission-mode acceptEdits --output-format text > "$SUMMARY_FILE" 2>>"$LOG"
RAW=$(cat "$SUMMARY_FILE")

if echo "$RAW" | grep -q "NO_SIGNALS"; then
  log "claude: значимого нет — молчим"; push_vault; exit 0
fi
# --- чистка: срезать ```-ограждения и преамбулу Claude до первого HTML-тега
SUMMARY=$(printf '%s\n' "$RAW" | sed -E '/^[[:space:]]*```/d' | awk 'f||/^[[:space:]]*</{f=1} f')
if [ -z "$SUMMARY" ]; then log "ERROR: пустой ответ Claude"; exit 1; fi

# --- финал в волт (история дайджестов)
FINAL="$VAULT/projects/mars/content/trendwatching/{mars} {article} трендвотч дайджест – $TODAY.md"
printf '%s\n' "$SUMMARY" > "$FINAL"

# --- отправка: Telegram держит до 4096; длиннее — Telegra.ph ссылкой (полный можно ссылкой)
MSG="$SUMMARY"
if [ "${#MSG}" -gt 4000 ]; then
  URL=$("$PY" "$SCRIPT_DIR/telegraph.py" "$FINAL" 2>>"$LOG")
  [ -n "$URL" ] && MSG="🎧 Трендвотч Марса $TODAY — длинно, целиком тут: $URL"
fi
RC=$(curl -s -o /dev/null -w '%{http_code}' -X POST "$TG/sendMessage" \
  --data-urlencode "chat_id=$TELEGRAM_CONTENT_CHAT_ID" --data-urlencode "text=$MSG" \
  --data-urlencode "parse_mode=HTML" --data-urlencode "disable_web_page_preview=true")
log "sendMessage rc=$RC"
push_vault
log "done"
