#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

ROOT=$(cd $(dirname "${BASH_SOURCE[0]}")/../..; pwd -P)
PROTOC=${BIN:-"${ROOT}/bin/protoc"}

if [ ! -f "${PROTOC}" ]; then
    echo "Downloading protoc"
    mkdir -p $ROOT/bin

    OS=""
    case $(uname) in
        "Linux") OS="linux";;
        "Darwin") OS="osx";;
        *)
            echo "unsupported platform"
            exit 1
            ;;
    esac

    ARCH=""
    case $(uname -m) in
        "x86_64") ARCH="x86_64";;
        "arm64") ARCH="aarch_64";;
        "aarch64") ARCH="aarch_64";;
        *)
            echo "unsupported arch"
            exit 1
            ;;
    esac

    TARBALL_URL="https://github.com/protocolbuffers/protobuf/releases/download/v3.20.2/protoc-3.20.2-${OS}-${ARCH}.zip"
    TARBALL_DEST=$(mktemp -t protoc.tar.gz.XXXXXXXXXX)
    curl --fail -s -L -o "${TARBALL_DEST}" "${TARBALL_URL}"
    EXTRACT_DIR=$(mktemp -d -t protoc.XXXXXXXXXX)
    unzip "${TARBALL_DEST}" -d "${EXTRACT_DIR}"
    cp -f "${EXTRACT_DIR}/bin/protoc" "${PROTOC}"

    rm -rf "${EXTRACT_DIR}" "${TARBALL_DEST}"
fi

echo "protoc has been downloaded, version: `$PROTOC --version`"
