#!/usr/bin/env bash
# Daily Slack sync: incremental fetch from Slack -> index into embedding engine.
# Schedule example (server local time):
#   0 2 * * * /path/to/adpilot-indexing-embedding-engine.com/tools/slack-sync-daily.sh

set -uo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
LOG_DIR="$ROOT/logs"
LOG_FILE="$LOG_DIR/slack-sync.log"

find_python() {
  if command -v python3 >/dev/null 2>&1; then
    command -v python3
    return 0
  fi
  if command -v python >/dev/null 2>&1; then
    command -v python
    return 0
  fi
  # Cron often has a minimal PATH, so try common locations.
  local candidates=(
    /usr/bin/python3
    /usr/local/bin/python3
    /opt/homebrew/bin/python3
  )
  local c
  for c in "${candidates[@]}"; do
    if [ -x "$c" ]; then
      echo "$c"
      return 0
    fi
  done
  return 1
}

mkdir -p "$LOG_DIR"
cd "$ROOT" || exit 1

{
  echo "===== $(date '+%Y-%m-%d %H:%M:%S %Z') slack-sync start ====="
  echo "root=$ROOT"

  PYTHON_BIN="$(find_python || true)"
  if [ -z "${PYTHON_BIN:-}" ]; then
    echo "[slack-sync-daily] FATAL: python3/python not found on PATH or common locations"
    echo "===== $(date '+%Y-%m-%d %H:%M:%S %Z') slack-sync end (exit 127) ====="
    exit 127
  fi

  # On first run (no per-channel state yet), fetch only recent history by default.
  export SLACK_SWEEP_DAYS="${SLACK_SWEEP_DAYS:-30}"
  export EMBEDDING_ENGINE_URL="${EMBEDDING_ENGINE_URL:-http://localhost:8000}"

  echo "python=$PYTHON_BIN ($("$PYTHON_BIN" --version 2>/dev/null || true))"
  echo "SLACK_SWEEP_DAYS=$SLACK_SWEEP_DAYS"
  echo "EMBEDDING_ENGINE_URL=$EMBEDDING_ENGINE_URL"

  set +e
  "$PYTHON_BIN" tools/fetch_slack.py
  fetch_status=$?
  if [ $fetch_status -ne 0 ]; then
    echo "[slack-sync-daily] fetch_slack.py failed with exit $fetch_status"
    echo "===== $(date '+%Y-%m-%d %H:%M:%S %Z') slack-sync end (exit $fetch_status) ====="
    exit $fetch_status
  fi

  "$PYTHON_BIN" tools/index_slack.py
  index_status=$?
  set -e

  echo "===== $(date '+%Y-%m-%d %H:%M:%S %Z') slack-sync end (exit $index_status) ====="
  exit "$index_status"
} >> "$LOG_FILE" 2>&1