#!/usr/bin/env bash
##makedesc: Install golang

# https://go.dev/dl/
# https://golang.org/doc/install
# https://github.com/udhos/update-golang/blob/master/update-golang.sh

set -eo pipefail

doRemove() {
    [ -d "/usr/local/go" ] && sudo rm -rf "/usr/local/go"
}

install() {
    dlUrl="https://go.dev/dl"
    json=$(curl -sSL "$dlUrl/?mode=json")
    version=$(echo "$json" | jq -r '.[0].version')
    echo
    echo "==============================================="
    echo "Installing golang v$version"
    echo "==============================================="
    echo
    latestJson=$(echo "$json" | jq -r '.[0].files.[] | select (.kind == "archive" and .os == "linux" and .arch == "amd64")')
    fileName=$(echo "$latestJson" | jq -r '.filename')
    fileUrl="$dlUrl/$fileName"
    downloadPath="$HOME/install"
    archivePath="$downloadPath/$fileName"
    doRemove
    [ -f "$archivePath" ] || wget "$fileUrl" -O "$archivePath"
    [ -f "$archivePath" ] && sudo tar -xzf "$archivePath" -C /usr/local
    sudo chown "$USER": -R /usr/local/go
    echo 'export PATH="/usr/local/go/bin:$PATH"' >> "$HOME/.profile"
    echo "export GOPATH=\"\$HOME/.go\"" >> "$HOME/.profile"
    echo
    go version
    go install github.com/go-delve/delve/cmd/dlv@latest
    go install
    echo "Finish!"
}

remove() {
    echo
    echo "==============================================="
    echo "Removing golang"
    echo "==============================================="
    echo
    doRemove
    echo
    echo "Finish!"
    echo
}

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

