#!/bin/bash

PREFERRED_GO_VERSION=go1.22.2
SUPPORTED_GO_VERSIONS='go1.2[012]'

GO_PKG_DARWIN=${PREFERRED_GO_VERSION}.darwin-amd64.pkg
GO_PKG_DARWIN_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

GO_PKG_LINUX=${PREFERRED_GO_VERSION}.linux-amd64.tar.gz
GO_PKG_LINUX_SHA=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

export ROOTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"
cd $ROOTDIR

# If Go isn't installed globally, setup environment variables for local install.
if [ -z "$(which go)" ] || [ -z "$(go version | grep "$SUPPORTED_GO_VERSIONS")" ]; then
  GODIR="$ROOTDIR/.vendor/golocal"

  if [ $(uname -s) = "Darwin" ]; then
    export GOROOT="$GODIR/usr/local/go"
  else
    export GOROOT="$GODIR/go"
  fi

  export PATH="$GOROOT/bin:$PATH"
fi

# Check if local install exists, and install otherwise.
if [ -z "$(which go)" ] || [ -z "$(go version | grep "$SUPPORTED_GO_VERSIONS")" ]; then
  [ -d "$GODIR" ] && rm -rf $GODIR
  mkdir -p "$GODIR"
  cd "$GODIR";

  if [ $(uname -s) = "Darwin" ]; then
    curl -L -O https://dl.google.com/go/$GO_PKG_DARWIN
    shasum -a256 $GO_PKG_DARWIN | grep $GO_PKG_DARWIN_SHA
    xar -xf $GO_PKG_DARWIN
    cpio -i < com.googlecode.go.pkg/Payload
  else
    curl -L -O https://dl.google.com/go/$GO_PKG_LINUX
    shasum -a256 $GO_PKG_LINUX | grep $GO_PKG_LINUX_SHA
    tar xf $GO_PKG_LINUX
  fi

  # Prove we did something right
  echo "$(go version) installed in $GODIR: Go Binary: $(which go)"
else
  echo "$(go version) found in $GODIR: Go Binary: $(which go)"
fi

cd $ROOTDIR

# Configure the new go to be the first go found
export GOPATH=$ROOTDIR/.vendor
