#!/usr/bin/env bash
set -euo pipefail

# Resolve skill root regardless of CWD (scripts can be invoked from repo root or elsewhere).
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
CACHE_DIR="$SKILL_DIR/cache"

usage() {
  cat <<'EOF'
Usage: fetch-index.sh [--version <x.y.z>]

Download MatrixOne documentation index files from docs.matrixorigin.cn
and cache them locally under skills/matrixone-docs/cache/v{version}/.

Environment:
  MO_DOCS_VERSION    Doc version (default: 3.0.13), overridden by --version.
EOF
  exit 0
}

VERSION="${MO_DOCS_VERSION:-3.0.13}"

while [[ $# -gt 0 ]]; do
  case "$1" in
    --version) VERSION="$2"; shift 2 ;;
    -h|--help) usage ;;
    *) echo "Unknown option: $1"; usage ;;
  esac
done

if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
  echo "Error: invalid version '$VERSION' (expected x.y.z)" >&2
  exit 1
fi

BASE_URL="https://docs.matrixorigin.cn/en/v26.${VERSION}"
DEST="$CACHE_DIR/v${VERSION}"
mkdir -p "$DEST"

KINDS=("sql" "func" "op")
NAMES=("SQL Reference" "Functions" "Operators")
FILES=("llms-sql.txt" "llms-func.txt" "llms-op.txt")

FAILED=0
for i in "${!KINDS[@]}"; do
  KIND="${KINDS[$i]}"
  NAME="${NAMES[$i]}"
  FILE="${FILES[$i]}"
  URL="${BASE_URL}/llms-${KIND}.txt"
  DEST_FILE="$DEST/$FILE"

  echo "Fetching $NAME index ($KIND) from $URL ..."
  if curl -fsSL --connect-timeout 10 --max-time 30 -o "$DEST_FILE" "$URL"; then
    LINES=$(wc -l < "$DEST_FILE" | tr -d ' ')
    echo "  OK: $LINES lines -> $DEST_FILE"
  else
    echo "  FAILED: could not fetch $URL" >&2
    FAILED=1
  fi
done

if [[ $FAILED -eq 1 ]]; then
  echo ""
  echo "Some indexes failed to download. Check your network or the version." >&2
  echo "URL pattern: $BASE_URL/llms-{kind}.txt" >&2
  exit 1
fi

echo ""
echo "Done. Indexes cached at $DEST/"
echo "Run: bash skills/matrixone-docs/scripts/search-docs.sh <keyword>"
