#!/usr/bin/env bash
#
# setup.sh — Preparación del entorno para el episodio 841 (GraphRAG III)
#
# Deja listo lo mínimo para interrogar el grafo con IA 100% local:
#   1. Comprueba que Ollama está instalado y en marcha (lo arranca si hace falta).
#   2. Descarga los modelos que usa el episodio:
#        - bge-m3:latest       → embeddings (vectores) de la demo
#        - nomic-embed-text    → embeddings por defecto del binario (alternativa)
#        - llama3.2:3b         → resúmenes de comunidad y respuestas de `ask`
#   3. Localiza el binario `graphrag` compilado y comprueba su versión.
#   4. Comprueba que existe la base de la demo `grafo.db`.
#
# No instala Rust ni compila nada: si el binario no existe, te dice cómo
# compilarlo o instalarlo desde crates.io.
#
# Uso:
#   chmod +x setup.sh
#   ./setup.sh

set -euo pipefail

# Binario de desarrollo (v0.2.12). Cambia esta ruta si compilas en otro sitio.
GRAPHRAG="/data/rust/graphrag/target/release/graphrag"

echo "==> 1/4 Comprobando Ollama..."
if ! command -v ollama >/dev/null 2>&1; then
  echo "ERROR: Ollama no está instalado. Instálalo desde https://ollama.ai/" >&2
  exit 1
fi

if ! curl -sf http://localhost:11434/api/tags >/dev/null 2>&1; then
  echo "Ollama no responde en http://localhost:11434; lo arranco..."
  ollama serve >/dev/null 2>&1 &
  for _ in $(seq 1 30); do
    if curl -sf http://localhost:11434/api/tags >/dev/null 2>&1; then break; fi
    sleep 1
  done
  if ! curl -sf http://localhost:11434/api/tags >/dev/null 2>&1; then
    echo "ERROR: Ollama no arrancó. Lánzalo a mano con:  ollama serve" >&2
    exit 1
  fi
fi
echo "    Ollama está en marcha."

echo "==> 2/4 Descargando modelos (si faltan)..."
# Embeddings de la demo: bge-m3, ~1 GB
ollama pull bge-m3:latest
# Embeddings por defecto del binario si no hay config: nomic-embed-text, ~275 MB
ollama pull nomic-embed-text
# Generación: resúmenes y respuestas de `ask`, llama3.2:3b, ~2 GB
ollama pull llama3.2:3b

echo "    Modelos disponibles:"
curl -s http://localhost:11434/api/tags \
  | grep -o '"name":"[^"]*"' | sed 's/"name":"/      - /; s/"$//'

echo "==> 3/4 Comprobando el binario graphrag..."
if [ -x "$GRAPHRAG" ]; then
  echo "    Binario: $GRAPHRAG"
  "$GRAPHRAG" --version
else
  echo "AVISO: no se encontró $GRAPHRAG"
  echo "Opciones:"
  echo "  · Compilar desde fuente:  cd /data/rust/graphrag && cargo build --release"
  echo "  · Instalar desde crates:  cargo install graphrag-search"
fi

echo "==> 4/4 Comprobando la base de la demo..."
if [ -f grafo.db ]; then
  echo "    Base: grafo.db"
else
  echo "AVISO: no se encontró grafo.db en el directorio actual."
  echo "        Es la base construida en el episodio 839; sin ella no hay demo."
fi

echo
echo "Entorno listo. Siguiente paso:"
echo "  graphrag stats grafo.db"
echo "  graphrag search \"servidor web seguro\" grafo.db -k 5"