#!/usr/bin/env bash
# install_nodejs
# --------------
# Instala Node.js en Linux usando nvm (Node Version Manager).
# Instala nvm si no está presente, luego instala la versión de Node indicada
# y la configura como default.
#
# USO:
#   source install_nodejs.sh
#   install_nodejs [version]
#
# ARGUMENTOS:
#   version   Versión principal de Node.js (default: 20)

install_nodejs() {
    local node_version="${1:-20}"

    echo "Instalando Node.js v${node_version} mediante nvm..."
    echo ""

    # Informar si Node ya está instalado
    if command -v node &>/dev/null; then
        local current_version
        current_version="$(node --version)"
        echo "Node.js ya está instalado: ${current_version}"
        echo "Continuando con la instalación/actualización..."
    fi

    # Instalar nvm si no está presente
    if [[ -d "$HOME/.nvm" ]]; then
        echo "nvm ya está instalado."
        export NVM_DIR="$HOME/.nvm"
        # shellcheck disable=SC1091
        [[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
    else
        echo "Descargando e instalando nvm..."
        curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

        export NVM_DIR="$HOME/.nvm"
        # shellcheck disable=SC1091
        [[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
        echo "nvm instalado correctamente."
    fi

    # Verificar que nvm esté disponible
    if ! command -v nvm &>/dev/null; then
        echo "install_nodejs: nvm no está disponible después de la instalación" >&2
        echo "  Ejecuta: source ~/.bashrc  (o abre una nueva terminal)" >&2
        return 1
    fi

    echo ""
    echo "Instalando Node.js v${node_version}..."
    nvm install "$node_version"
    nvm use "$node_version"
    nvm alias default "$node_version"

    local installed_node
    local installed_npm
    installed_node="$(node --version)"
    installed_npm="$(npm --version)"

    echo ""
    echo "Node.js instalado correctamente:"
    echo "  Node.js: ${installed_node}"
    echo "  npm:     ${installed_npm}"
    echo ""
    echo "Si es una instalación nueva, reinicia tu terminal o ejecuta:"
    echo "  source ~/.bashrc  # o ~/.zshrc según tu shell"
}

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