#!/usr/bin/env bash
#
# setup.sh — Preparación del entorno para la demo de GraphRAG (episodio 837)
#
# Instala Ollama si no está, lo arranca si hace falta y descarga los modelos
# mínimos. Al terminar, verifica que Ollama responde.
#
# Uso:
#   ./setup.sh              # configuración mínima (portátil modesto)
#   ./setup.sh --gpu        # configuración recomendada (mejor calidad)
#
set -euo pipefail

OLLAMA_URL="http://localhost:11434"
GPU=0
[[ "${1:-}" == "--gpu" ]] && GPU=1

echo "🔧 Preparando el entorno de GraphRAG..."
echo

# ---------------------------------------------------------------------------
# 1. Ollama instalado
# ---------------------------------------------------------------------------
if ! command -v ollama >/dev/null 2>&1; then
    echo "📦 Ollama no está instalado. Instalando con el script oficial..."
    curl -fsSL https://ollama.ai/install.sh | sh
else
    echo "✅ Ollama ya está instalado: $(ollama --version 2>/dev/null || echo 'versión desconocida')"
fi

# ---------------------------------------------------------------------------
# 2. Arrancar Ollama si no responde
# ---------------------------------------------------------------------------
if curl -fsS "${OLLAMA_URL}/api/tags" >/dev/null 2>&1; then
    echo "✅ Ollama ya está corriendo en ${OLLAMA_URL}"
else
    echo "🚀 Arrancando Ollama en segundo plano..."
    # ollama serve es un proceso de larga duración: lo mandamos al fondo.
    nohup ollama serve >/tmp/ollama-graphrag.log 2>&1 &
    # Esperamos hasta 30 s a que levante.
    for i in $(seq 1 30); do
        if curl -fsS "${OLLAMA_URL}/api/tags" >/dev/null 2>&1; then
            echo "✅ Ollama arrancado (tras ${i}s)"
            break
        fi
        sleep 1
    done
fi

# Verificación final: si no responde, abortamos con mensaje claro.
if ! curl -fsS "${OLLAMA_URL}/api/tags" >/dev/null 2>&1; then
    echo "❌ Ollama no responde en ${OLLAMA_URL}. Revisa /tmp/ollama-graphrag.log"
    exit 1
fi

# ---------------------------------------------------------------------------
# 3. Descargar modelos
# ---------------------------------------------------------------------------
if [[ "${GPU}" -eq 1 ]]; then
    echo
    echo "🎮 Configuración recomendada (más calidad, más VRAM):"
    EMBED_MODEL="bge-m3"
    NER_MODEL="gemma4:e2b"
else
    echo
    echo "💻 Configuración mínima (rápida, funciona en cualquier equipo):"
    EMBED_MODEL="nomic-embed-text"
    NER_MODEL="llama3.2:3b"
fi

echo "   - Embeddings: ${EMBED_MODEL}"
ollama pull "${EMBED_MODEL}"

echo "   - NER:        ${NER_MODEL}"
ollama pull "${NER_MODEL}"

# ---------------------------------------------------------------------------
# 4. Comprobar el binario graphrag
# ---------------------------------------------------------------------------
echo
BIN="${GRAPHRAG_BIN:-$(command -v graphrag || true)}"
if [[ -n "${BIN}" ]]; then
    echo "✅ Binario graphrag encontrado: ${BIN}"
    "${BIN}" --version
else
    echo "⚠️  No se encontró el binario 'graphrag' en el PATH."
    echo "    Instálalo con:  cargo install graphrag-search"
    echo "    O usa el binario local: /data/rust/graphrag/target/release/graphrag"
fi

echo
echo "🎉 Entorno listo. Siguiente paso:"
echo "    graphrag seed demo.db"
