#!/usr/bin/env bash
# Daily Drive owner-index sync (incremental).
# Schedule example (server local time):  0 8 * * * /path/to/app/tools/drive-index-daily.sh
#
# Portable: app root = parent of this script. No hardcoded machine paths.
# Needs: node available (PATH or common install locations), .env in app root.

set -uo pipefail

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

find_node() {
  if command -v node >/dev/null 2>&1; then
    command -v node
    return 0
  fi
  # Cron often has a tiny PATH — try common locations
  local candidates=(
    /usr/local/bin/node
    /opt/homebrew/bin/node
  )
  # Newest nvm node if present
  local nvm_node
  nvm_node="$(ls -1d "$HOME"/.nvm/versions/node/*/bin/node 2>/dev/null | sort -V | tail -1 || true)"
  if [ -n "${nvm_node:-}" ]; then
    candidates+=("$nvm_node")
  fi
  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') drive-index start ====="
  echo "root=$ROOT"

  NODE_BIN="$(find_node || true)"
  if [ -z "${NODE_BIN:-}" ]; then
    echo "[drive-index-daily] FATAL: node not found on PATH or common locations"
    echo "===== $(date '+%Y-%m-%d %H:%M:%S %Z') drive-index end (exit 127) ====="
    exit 127
  fi

  echo "node=$NODE_BIN ($("$NODE_BIN" -v 2>/dev/null || true))"

  set +e
  "$NODE_BIN" tools/drive-owner-index-cron.js
  status=$?
  set -e

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