#!/usr/bin/env bash
# Crea el entorno virtual base del curso en la carpeta actual y lo comprueba.
# Uso: bash preparar_entorno.sh
set -euo pipefail

VERDE='\033[32m'; ROJO='\033[31m'; AMARILLO='\033[33m'; FIN='\033[0m'
ok()    { echo -e "  ${VERDE}✔${FIN} $1"; }
error() { echo -e "  ${ROJO}✘${FIN} $1"; }
aviso() { echo -e "  ${AMARILLO}•${FIN} $1"; }

PAQUETES="numpy matplotlib jupyter scikit-learn pandas"

echo -e "\n=== Preparando el entorno de Python del curso en: $(pwd) ===\n"

if command -v uv >/dev/null 2>&1; then
  ok "uv encontrado: $(uv --version)"
  USAR_UV=1
else
  aviso "uv no está instalado (recomendado): curl -LsSf https://astral.sh/uv/install.sh | sh"
  aviso "Uso python3 -m venv + pip, que es más lento"
  USAR_UV=0
fi

if [ "$USAR_UV" = 1 ]; then
  uv venv .venv --python 3.12
  # shellcheck disable=SC1091
  source .venv/bin/activate
  uv pip install $PAQUETES
else
  if ! python3 -c 'import sys; sys.exit(0 if sys.version_info >= (3, 11) else 1)'; then
    error "Necesitas Python 3.11 o superior (tienes $(python3 --version 2>&1))."
    echo "      macOS: brew install python@3.12 · Ubuntu: sudo apt install python3.12 python3.12-venv"
    exit 1
  fi
  python3 -m venv .venv
  # shellcheck disable=SC1091
  source .venv/bin/activate
  pip install --upgrade pip
  pip install $PAQUETES
fi

echo -e "\n=== Comprobación ===\n"
ok "Python del entorno: $(command -v python)"
for paquete in numpy matplotlib sklearn pandas; do
  if python -c "import $paquete" 2>/dev/null; then
    ok "$paquete $(python -c "import $paquete; print($paquete.__version__)")"
  else
    error "$paquete no se ha podido importar"
  fi
done

if ! grep -qs '^\.venv/' .gitignore; then
  echo ".venv/" >> .gitignore
  ok "Añadido .venv/ a .gitignore"
fi

echo -e "\n${VERDE}Listo.${FIN} Activa el entorno cada vez que abras una terminal con:"
echo -e "    source .venv/bin/activate   (en Windows: .venv\\\\Scripts\\\\activate)\n"
