#!/bin/bash
# Инстаграм-ниша Наташи: чужие аккаунты (Meta business_discovery, бесплатно)
# → два отчёта файлами в волт → их читает контент-планёрка (шаг 8).
#
# Два трека, как в телеграм-трендвотче: ai и биз. Наборы аккаунтов лежат в
# волте (репозиторий feedwatch публичный, списку наблюдения там не место).
#
# Имя файла обязано содержать дату дня запуска: планёрка ищет Glob-ом по
# сегодняшней дате и вчерашний отчёт не подхватит.
#
# Запуск: bash nisha.sh
set -u

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

VAULT="${FEEDWATCH_VAULT_ROOT:?В .env нет FEEDWATCH_VAULT_ROOT}"
CONFIG_DIR="$VAULT/projects/vibe-coding/configs"
OUT_DIR="$VAULT/projects/channel/trendwatching"
LOG_DIR="${FEEDWATCH_DATA_DIR:-$HOME/feedwatch-data}"
LOG="$LOG_DIR/nisha.log"
DATE="$(date +%F)"
mkdir -p "$LOG_DIR"

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

log "start"

# Волт на Pi — клон: без pull конфиги будут старыми, без push отчёт никуда не уедет.
if [ "${FEEDWATCH_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

FAILED=0
for TRACK in ai биз; do
  case "$TRACK" in
    ai)  CONFIG="$CONFIG_DIR/config.nisha-ai.json";  DB="$SCRIPT_DIR/data/nisha-ai.db" ;;
    биз) CONFIG="$CONFIG_DIR/config.nisha-biz.json"; DB="$SCRIPT_DIR/data/nisha-biz.db" ;;
  esac

  if [ ! -f "$CONFIG" ]; then
    log "ERROR: нет конфига $CONFIG — трек $TRACK пропущен"
    FAILED=1
    continue
  fi

  OUT="$OUT_DIR/{channel} {source} инстаграм-ниша $TRACK – $DATE.md"
  if "$SCRIPT_DIR/venv/bin/python" "$SCRIPT_DIR/report.py" weekly \
       --config "$CONFIG" --db "$DB" --out "$OUT" >> "$LOG" 2>&1; then
    log "ok: трек $TRACK → $OUT"
  else
    # Один упавший трек не повод терять второй.
    log "ERROR: трек $TRACK не собрался"
    FAILED=1
  fi
done

# Токен Meta живёт 60 дней и сам не продлевается. Протухнув, он ничего не
# ломает с грохотом — просто перестаёт отдавать чужие аккаунты. Предупреждаем
# заранее, пока есть запас времени переоформить.
DAYS_LEFT=$("$SCRIPT_DIR/venv/bin/python" -c "
import sys
sys.path.insert(0, '$SCRIPT_DIR')
import common, fetch
env = common.load_env()
left = fetch.token_days_left(env.get('IG_ACCESS_TOKEN', ''))
print('' if left is None else left)
" 2>>"$LOG")

if [ -n "$DAYS_LEFT" ] && [ "$DAYS_LEFT" -lt 10 ] 2>/dev/null; then
  log "токен Meta: осталось $DAYS_LEFT дн."
  if [ -n "${TELEGRAM_BOT_TOKEN:-}" ] && [ -n "${TELEGRAM_CHAT_ID:-}" ]; then
    curl -s -o /dev/null --max-time 15 \
      -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
      --data-urlencode "chat_id=$TELEGRAM_CHAT_ID" \
      --data-urlencode "text=⚠️ feedwatch: токену Meta осталось $DAYS_LEFT дн.
Без него чужие аккаунты перестанут собираться, и планёрка молча останется без инстаграм-ниши.
Переоформить: Graph API Explorer → новый токен → обмен на 60-дневный." >/dev/null 2>&1
  fi
else
  log "токен Meta: запас ${DAYS_LEFT:-неизвестен} дн."
fi

if [ "${FEEDWATCH_GIT_SYNC:-0}" = "1" ]; then
  git -C "$VAULT" add "projects/channel/trendwatching" >> "$LOG" 2>&1
  git -C "$VAULT" commit -m "feedwatch: инстаграм-ниша $DATE" >> "$LOG" 2>&1 \
    && git -C "$VAULT" push >> "$LOG" 2>&1 || log "WARN: commit/push не прошёл (возможно, нечего коммитить)"
fi

log "finish (failed=$FAILED)"
exit $FAILED
