#!/usr/bin/env bash
# install_uv
# ----------
# Instala uv — gestor de paquetes Python ultra-rápido escrito en Rust.
# Usa el instalador oficial de astral.sh. Configura PATH en ~/.bashrc y ~/.zshrc.
#
# USO:
#   source install_uv.sh
#   install_uv

install_uv() {
    echo "Instalando uv (gestor de paquetes Python)..."
    echo ""

    # Verificar si uv ya está instalado
    if command -v uv &>/dev/null; then
        local current_version
        current_version="$(uv --version 2>/dev/null || echo "desconocida")"
        echo "uv ya está instalado (versión: ${current_version})."
        return 0
    fi

    # Verificar curl
    if ! command -v curl &>/dev/null; then
        echo "install_uv: curl no está instalado (requerido)" >&2
        echo "  Instálalo con: sudo apt install curl" >&2
        return 1
    fi

    echo "Descargando e instalando uv (instalador oficial astral.sh)..."
    if ! curl -LsSf https://astral.sh/uv/install.sh | sh; then
        echo "install_uv: falló la instalación de uv" >&2
        echo "  Verifica tu conexión a internet y permisos" >&2
        return 1
    fi

    echo ""

    # Configurar PATH en ~/.bashrc
    if ! grep -q ".cargo/bin" "$HOME/.bashrc" 2>/dev/null; then
        {
            echo ""
            echo "# uv and cargo binaries"
            echo 'export PATH="$HOME/.cargo/bin:$PATH"'
        } >> "$HOME/.bashrc"
        echo "PATH añadido a ~/.bashrc"
    else
        echo "PATH ya configurado en ~/.bashrc"
    fi

    # Configurar PATH en ~/.zshrc si existe
    if [[ -f "$HOME/.zshrc" ]]; then
        if ! grep -q ".cargo/bin" "$HOME/.zshrc" 2>/dev/null; then
            {
                echo ""
                echo "# uv and cargo binaries"
                echo 'export PATH="$HOME/.cargo/bin:$PATH"'
            } >> "$HOME/.zshrc"
            echo "PATH añadido a ~/.zshrc"
        fi
    fi

    # Cargar PATH en la sesión actual
    export PATH="$HOME/.cargo/bin:$PATH"

    echo ""

    # Verificar instalación
    if ! command -v uv &>/dev/null; then
        echo "uv instalado pero no está en el PATH actual."
        echo "  Ejecuta: source ~/.bashrc  (o abre una nueva terminal)"
    else
        local installed_version
        installed_version="$(uv --version)"
        echo "uv instalado correctamente: ${installed_version}"
    fi

    echo ""
    echo "Comandos útiles de uv:"
    echo "  uv venv                     - Crear entorno virtual"
    echo "  uv pip install <package>    - Instalar paquete"
    echo "  uv pip sync requirements.txt - Sincronizar dependencias"
}

# Ejecutar si se invoca directamente
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    install_uv "$@"
fi
