#!/bin/bash
set -e

echo ">>> Fetching latest Go version from go.dev..."

LATEST_VERSION=$(curl -fsSL https://go.dev/VERSION?m=text | head -n 1)

if [[ -z "$LATEST_VERSION" ]]; then
    echo "!!! ERROR: Could not fetch latest Go version"
    exit 1
fi

ARCH="linux-amd64"
TARBALL="${LATEST_VERSION}.${ARCH}.tar.gz"
DOWNLOAD_URL="https://go.dev/dl/${TARBALL}"

echo ">>> Latest version detected: $LATEST_VERSION"
echo ">>> Downloading from: $DOWNLOAD_URL"
echo ">>> Starting download..."

curl -fSL --progress-bar "$DOWNLOAD_URL" -o "/tmp/$TARBALL" || {
    echo "!!! ERROR: Failed downloading $DOWNLOAD_URL"
    exit 1
}

echo ">>> Removing previous Go installation..."
sudo rm -rf /usr/local/go

echo ">>> Extracting..."
sudo tar -C /usr/local -xzf "/tmp/$TARBALL"

echo ">>> Configuring environment..."
PROFILE="$HOME/.profile"

if ! grep -q "/usr/local/go/bin" "$PROFILE"; then
    cat <<EOF >> "$PROFILE"

# GoLang
export GOPATH=\$HOME/go
export PATH=\$PATH:/usr/local/go/bin:\$GOPATH/bin
EOF
fi

echo ">>> Activating environment..."
export GOPATH=$HOME/go
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

echo ">>> Cleaning up..."
rm "/tmp/$TARBALL"

echo ">>> Testing installation..."
go version || { echo "Installation failed!"; exit 1; }

echo ">>> Go $LATEST_VERSION installed successfully!"
echo ">>> Run: source ~/.profile"
