#!/usr/bin/env bash
#
# setup.sh — Preparación del entorno para el episodio 839 (GraphRAG II)
#
# Deja listo lo mínimo para construir el grafo con IA 100% local:
#   1. Comprueba que Ollama está instalado y en marcha.
#   2. Descarga los dos modelos que usa el episodio:
#        - bge-m3:latest       → embeddings (vectores)
#        - llama3.2:3b         → NER (extracción de entidades)
#   3. Localiza el binario `graphrag` compilado y comprueba su versión.
#
# 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/3 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"
  echo "Arráncalo con:  ollama serve"
  echo "Y vuelve a ejecutar este script."
  exit 1
fi
echo "    Ollama está en marcha."

echo "==> 2/3 Descargando modelos (si faltan)..."
# Embeddings: bge-m3, 566M parámetros, ~1 GB
ollama pull bge-m3:latest
# NER: llama3.2:3b, 3.2B parámetros, ~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/3 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
echo "Entorno listo. Siguiente paso:"
echo "  graphrag build ./notas-muestra grafo.db --ner-model llama3.2:3b --embed-model bge-m3:latest"