#!/bin/bash
# =============================================================================
# primera-consulta.sh — Tu primera consulta a un modelo local
# =============================================================================
#
# Uso:
#   chmod +x primera-consulta.sh
#   ./primera-consulta.sh
#
# Descripción:
#   Script paso a paso que guía al oyente en su primera interacción con un
#   modelo de lenguaje local. Cubre los 4 pasos del Bloque 6 del episodio:
#
#   Paso 1 — Verificar que Ollama está instalado y corriendo
#   Paso 2 — Descargar un modelo pequeño (qwen2.5:3b)
#   Paso 3 — Hacer una consulta desde terminal con ollama run
#   Paso 4 — Abrir Open WebUI en http://localhost:3000
#
#   Es el script estrella del episodio. El momento en que el oyente descubre
#   que su máquina puede responder con inteligencia genuina, sin internet.
#
# Requisitos:
#   - Ollama instalado (ver 02-instalacion/setup-ollama.sh)
#   - Conexión a internet (solo para el Paso 2, descarga del modelo)
#   - ~3 GB de espacio libre para el modelo
#
# =============================================================================

set -euo pipefail

# Colores para el output
VERDE='\033[0;32m'
AMARILLO='\033[1;33m'
AZUL='\033[0;34m'
ROJO='\033[0;31m'
RESET='\033[0m'

echo -e "${AZUL}╔══════════════════════════════════════════════════════╗${RESET}"
echo -e "${AZUL}║  🚀  Tu primera consulta a un modelo local          ║${RESET}"
echo -e "${AZUL}║  Episodio 827 — Recursos IA: el botiquín del        ║${RESET}"
echo -e "${AZUL}║                 explorador                          ║${RESET}"
echo -e "${AZUL}╚══════════════════════════════════════════════════════╝${RESET}"
echo ""

# =============================================================================
# PASO 1 — Verificar que Ollama está instalado y corriendo
# =============================================================================
echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
echo -e "${AZUL}  Paso 1 de 4: Verificar Ollama${RESET}"
echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
echo ""

# 1a. Comprobar que el binario de Ollama existe
echo -n "  Comprobando instalación de Ollama... "
if command -v ollama &>/dev/null; then
    echo -e "${VERDE}✓${RESET}"
    echo "  Versión: $(ollama --version 2>/dev/null || echo 'desconocida')"
else
    echo -e "${ROJO}✗${RESET}"
    echo ""
    echo "  ERROR: Ollama no está instalado."
    echo ""
    echo "  Para instalar Ollama, ejecuta:"
    echo "    curl -fsSL https://ollama.com/install.sh | sh"
    echo ""
    echo "  O usa el script guiado:"
    echo "    ../02-instalacion/setup-ollama.sh"
    echo ""
    exit 1
fi
echo ""

# 1b. Comprobar que el servicio está corriendo (vía API)
echo -n "  Comprobando que el servicio está activo... "
if curl -s http://localhost:11434/api/tags &>/dev/null; then
    echo -e "${VERDE}✓${RESET}"
    echo "  API REST respondiendo en http://localhost:11434"
else
    echo -e "${AMARILLO}⚠${RESET}"
    echo ""
    echo "  El binario está instalado pero el servicio no responde."
    echo ""
    echo "  Arranca el servicio con:"
    echo "    sudo systemctl start ollama"
    echo ""
    echo "  O manualmente:"
    echo "    ollama serve &"
    echo ""
    echo "  Luego vuelve a ejecutar este script."
    echo ""
    exit 1
fi
echo ""

# 1c. Mostrar modelos ya descargados (si los hay)
MODELOS_EXISTENTES=$(ollama list 2>/dev/null | tail -n +2 | wc -l)
if [ "$MODELOS_EXISTENTES" -gt 0 ]; then
    echo "  Modelos disponibles actualmente:"
    ollama list 2>/dev/null | tail -n +2 | while read -r line; do
        echo "    • $line"
    done
else
    echo "  No hay modelos descargados todavía."
fi
echo ""

# =============================================================================
# PASO 2 — Descargar un modelo pequeño
# =============================================================================
echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
echo -e "${AZUL}  Paso 2 de 4: Descargar un modelo pequeño${RESET}"
echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
echo ""

# Usamos qwen2.5:3b como modelo recomendado para empezar
# Es pequeño (~2 GB), rápido, y sorprendentemente capaz
MODELO="qwen2.5:3b"

echo "  Modelo recomendado: ${AMARILLO}${MODELO}${RESET}"
echo "  Tamaño aproximado: ~2 GB"
echo "  Ideal para: hardware con 8-16 GB de RAM"
echo ""

# Comprobar si ya está descargado
if ollama list 2>/dev/null | grep -q "^${MODELO}\s"; then
    echo -e "  ${VERDE}✓${RESET} El modelo ya está descargado."
else
    echo "  Descargando modelo... (esto puede tardar según tu conexión)"
    echo "  ☕  Momento café."
    echo ""

    # El comando estrella: ollama pull
    ollama pull "$MODELO"

    echo ""
    echo -e "  ${VERDE}✓${RESET} Modelo descargado correctamente."
fi
echo ""

# =============================================================================
# PASO 3 — Hacer una consulta desde terminal
# =============================================================================
echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
echo -e "${AZUL}  Paso 3 de 4: Preguntar desde la terminal${RESET}"
echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
echo ""

# Prompt diseñado para ser didáctico y mostrar la capacidad del modelo
PROMPT="Explícame qué es un modelo de lenguaje cuantizado como si tuviera 12 años"

echo -e "  ${AMARILLO}Pregunta:${RESET}"
echo "  \"$PROMPT\""
echo ""
echo -e "  ${AZUL}Respuesta:${RESET}"
echo ""

# El momento mágico del episodio: ollama run
ollama run "$MODELO" "$PROMPT"

echo ""
echo -e "  ${VERDE}✓${RESET} Consulta completada."
echo ""

# =============================================================================
# PASO 4 — Mensaje para abrir Open WebUI
# =============================================================================
echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
echo -e "${AZUL}  Paso 4 de 4: Interfaz web (Open WebUI)${RESET}"
echo -e "${AZUL}────────────────────────────────────────────────────────${RESET}"
echo ""

echo "  Tu modelo local ya funciona desde terminal."
echo ""
echo "  Para usar la interfaz gráfica:"
echo ""

# Comprobar si Open WebUI está corriendo
if curl -s http://localhost:3000 &>/dev/null; then
    echo -e "  ${VERDE}✓${RESET} Open WebUI detectado en http://localhost:3000"
    echo ""
    echo "  Abre tu navegador y visita:"
    echo -e "    ${AZUL}→ http://localhost:3000${RESET}"
    echo ""
    echo "  Crea tu cuenta (el primer usuario es administrador)."
    echo "  Selecciona el modelo '${MODELO}' y empieza a chatear."
else
    echo "  Open WebUI no está corriendo aún."
    echo ""
    echo "  Para levantarlo, ejecuta:"
    echo "    ../02-instalacion/setup-openwebui.sh"
    echo ""
    echo "  O directamente con Docker:"
    echo "    docker run -d -p 3000:8080 \\"
    echo "      -v open-webui:/app/backend/data \\"
    echo "      --name open-webui --restart always \\"
    echo "      ghcr.io/open-webui/open-webui:main"
    echo ""
    echo "  Luego abre:"
    echo -e "    ${AZUL}→ http://localhost:3000${RESET}"
fi

echo ""
echo "  💡  Prueba a subir un PDF y pedir un resumen."
echo "  💡  Pídele que te explique un concepto."
echo "  💡  Juega. Experimenta. Rompe cosas."
echo ""

# =============================================================================
# CIERRE
# =============================================================================
echo -e "${VERDE}╔══════════════════════════════════════════════════════╗${RESET}"
echo -e "${VERDE}║  ✅  Laboratorio listo                              ║${RESET}"
echo -e "${VERDE}║                                                     ║${RESET}"
echo -e "${VERDE}║  Tu máquina acaba de responder con inteligencia     ║${RESET}"
echo -e "${VERDE}║  genuina, sin pasar por ningún servidor externo,    ║${RESET}"
echo -e "${VERDE}║  sin enviar tus datos a nadie.                      ║${RESET}"
echo -e "${VERDE}║                                                     ║${RESET}"
echo -e "${VERDE}║  Esa sensación no se olvida. 🎉                     ║${RESET}"
echo -e "${VERDE}╚══════════════════════════════════════════════════════╝${RESET}"
echo ""
echo "  Próximo episodio (829): Skills imprescindibles para tu agente IA"
echo "  Vamos a enseñar al modelo a usar herramientas."
echo ""
echo "  Nos oímos el jueves. Sed felices. Y seguid trasteando."
echo ""