#!/bin/sh

DIR=$(dirname "$(readlink -f "$0")")
. "$DIR/../env.sh"


FILES_PATH=$PREFIX/nodejs
NODE_BIN=$PREFIX/bin/node
NODE_URL=https://nodejs.org/dist
NODE_VERSION=v14.15.4
NPM_BIN=npm
if in_china; then
    NODE_URL=https://npm.taobao.org/mirrors/node
    NPM_BIN=cnpm
fi
export NPM_BIN

log "Setting up nodejs"

lspkgs() {
    curl -s $NODE_URL/index.json \
        | jq '.[] | "\(.version) \(if .lts then "(lts)" else "" end)"' -r
}

uninstall() {
    if [ -f "$FILES_PATH"  ]; then
        tac "$FILES_PATH" | grep -v '/$' | xargs -n 10 -- sudo rm -f
    fi
}

install() {
    VERSION=$1
    ARCH=x86
    if [ -x "$NODE_BIN" ] && [ "$("$NODE_BIN" --version)" = "$VERSION" ]; then
        return
    fi
    case "$(uname -m)" in
        x86_64)
            ARCH=x64
            ;;
        armv6|armv6l)
            ARCH=armv6l
            ;;
        armv7|armv7l)
            ARCH=armv7l
            ;;
        armv8|armv8l|aarch64)
            ARCH=arm64
            ;;
    esac
    NAME=node-$VERSION-linux-$ARCH.tar.gz
    # download package
    echo wget -O "/tmp/$NAME" "$NODE_URL/$VERSION/$NAME"
    wget -O "/tmp/$NAME" "$NODE_URL/$VERSION/$NAME"
    # remove previous installed
    uninstall
    # install and save extracted paths
    sudo tar zxvf "/tmp/$NAME" --strip 1 -C "$PREFIX" \
        | sed -r "s|^[^/]+/|$PREFIX/|" \
        | sudo tee "$FILES_PATH" >/dev/null
    # remove download path
    rm "/tmp/$NAME"
    sudo npm install -g yarn
    if in_china; then
        #sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
        yarnpkg config set registry https://registry.npm.taobao.org --global
        yarnpkg config set disturl https://npm.taobao.org/dist --global
        yarnpkg config set sass_binary_site https://npm.taobao.org/mirrors/node-sass --global
        yarnpkg config set electron_mirror https://npm.taobao.org/mirrors/electron/ --global
        yarnpkg config set puppeteer_download_host https://npm.taobao.org/mirrors --global
        yarnpkg config set chromedriver_cdnurl https://npm.taobao.org/mirrors/chromedriver --global
        yarnpkg config set operadriver_cdnurl https://npm.taobao.org/mirrors/operadriver --global
        yarnpkg config set phantomjs_cdnurl https://npm.taobao.org/mirrors/phantomjs --global
        yarnpkg config set selenium_cdnurl https://npm.taobao.org/mirrors/selenium --global
        yarnpkg config set sqlite3_binary_host_mirror https://foxgis.oss-cn-shanghai.aliyuncs.com/ --global
        yarnpkg config set profiler_binary_host_mirror https://npm.taobao.org/mirrors/node-inspector/ --global
        yarnpkg config set chromedriver_cdnurl https://cdn.npm.taobao.org/dist/chromedriver --global
        yarnpkg config set node_inspector_cdnurl https://npm.taobao.org/mirrors/node-inspector --global
        yarnpkg config set sentrycli_cdnurl https://npm.taobao.org/mirrors/sentry-cli
    fi
    if enhance_vim; then
        v -c "CocInstall -sync coc-json coc-vetur coc-tsserver coc-eslint|qall"
    fi
}


case "$1" in
    ls|list)
        lspkgs | less
        ;;
    uninstall)
        uninstall
        ;;
    '')
        install "$NODE_VERSION"
        ;;
    *)
        install "$1"
        ;;
esac