#!/usr/bin/env bash
##makedesc: Install nodejs + npm via nvm

set -eo pipefail

installed() { command -v "$1" >/dev/null 2>&1; }

isMac() { [ "$(uname -s)" = "Darwin" ]; }
isLinux() { [ "$(uname -s)" = "Linux" ]; }

NVM_DIR="${NVM_DIR:-$HOME/.nvm}"

install() {
    echo
    echo "==============================================="
    echo "Installing nodejs + nvm"
    echo "==============================================="
    echo

    if isMac; then
        if installed brew; then
            brew install nvm
        else
            echo "ERROR: Install Homebrew first." >&2
            exit 1
        fi
    elif isLinux; then
        curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
    else
        echo "ERROR: This OS is not supported yet!" >&2
        exit 1
    fi

    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && source "$NVM_DIR/nvm.sh"
    [ -s "$NVM_DIR/bash_completion" ] && source "$NVM_DIR/bash_completion"

    nvm install-latest-npm
    nvm install node
    nvm use node

    if ! grep -q 'NVM_DIR' "$HOME/.profile" 2>/dev/null; then
        cat << EOF >> "$HOME/.profile"

# nvm (not nvim!)
export NVM_DIR="\$HOME/.nvm"
[ -s "\$NVM_DIR/nvm.sh" ] && source "\$NVM_DIR/nvm.sh"
[ -s "\$NVM_DIR/bash_completion" ] && source "\$NVM_DIR/bash_completion"

EOF
    fi

    echo
    echo "Finish!"
    nvm current
    echo
}

remove() {
    echo
    echo "==============================================="
    echo "Removing nodejs + nvm"
    echo "==============================================="
    echo

    if command -v nvm >/dev/null 2>&1; then
        nvm unload 2>/dev/null || true
    fi
    rm -rf "$NVM_DIR"
    sed -i '/NVM_DIR/d' "$HOME/.profile" 2>/dev/null || true
    if isMac && installed brew; then
        brew uninstall nvm 2>/dev/null || true
    fi

    echo
    echo "Finish!"
    echo
}

case "$1" in
    r|remove|d|delete|p|purge) remove ;;
    *) install ;;
esac
