#!/bin/bash
# meta-puller: свои посты Instagram и Threads с метриками → SQLite → архивы в волт.
# Запускается systemd-таймером на Pi (ежедневно ~07:00 MSK) или руками: bash run.sh
# Пути и секреты — из .env рядом со скриптом.
set -u

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

LOG_DIR="${META_DATA_DIR:-$HOME/meta-puller-data}"
LOG="$LOG_DIR/run.log"
mkdir -p "$LOG_DIR"

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

# На Pi волт — клон репозитория: подтягиваем свежий, чтобы не писать в устаревшее
# дерево и не ловить конфликт на следующем автосинке.
if [ "${META_GIT_SYNC:-0}" = "1" ] && [ -n "${META_VAULT_ROOT:-}" ]; then
  # rebase --abort обязателен: без него неудавшийся rebase оставляет клон в
  # полуразобранном состоянии, и следом падают все, кто тянет волт после
  # (feedwatch 07:15, enwatch 07:30, утренний прогон 08:15).
  if ! git -C "$META_VAULT_ROOT" pull --rebase >> "$LOG" 2>&1; then
    git -C "$META_VAULT_ROOT" rebase --abort >> "$LOG" 2>&1
    log "WARN: git pull --rebase не прошёл — откатил rebase, работаю на локальном состоянии волта"
  fi
fi

log "start"
"$SCRIPT_DIR/venv/bin/python" "$SCRIPT_DIR/cli.py" >> "$LOG" 2>&1
RC=$?
log "cli.py rc=$RC"

if [ "${META_GIT_SYNC:-0}" = "1" ] && [ -n "${META_VAULT_ROOT:-}" ]; then
  # Ровно два файла, которые пишет cli.py. `git add projects/channel` целиком
  # захватывал бы и рукописный канон рядом (agents.md, контент-календарь,
  # сетку рубрик, бэклог, tasks.md) — он уезжал бы на GitHub непросмотренным
  # под коммитом «meta-puller: архивы». Добавляем по одному: `git add a b` при
  # отсутствующем `a` падает на pathspec и не добавляет ничего.
  for p in "projects/channel/{channel} {source} Instagram архив постов.md" \
           "projects/channel/{channel} {source} Threads архив постов.md"; do
    git -C "$META_VAULT_ROOT" add -- "$p" >> "$LOG" 2>&1 || true
  done
  if git -C "$META_VAULT_ROOT" commit -m "meta-puller: архивы $(date '+%Y-%m-%d')" >> "$LOG" 2>&1; then
    git -C "$META_VAULT_ROOT" push >> "$LOG" 2>&1 || log "WARN: push не прошёл — коммит остаётся локальным"
  else
    log "git: коммитить нечего"
  fi
fi

log "done"
exit $RC
