#!/bin/bash

set -e

# courtesy of https://github.com/grpc/grpc
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)"
GIT_ROOT="$(git rev-parse --show-toplevel)"

# DISABLE_BAZEL_WRAPPER can be set to eliminate the wrapper logic
if [ "${DISABLE_BAZEL_WRAPPER}" != "" ] && [ "${OVERRIDE_BAZEL_VERSION}" == "" ]; then
    if [ "${BAZEL_REAL}" != "" ]; then
        # use BAZEL_REAL as set by
        # https://github.com/bazelbuild/bazel/blob/master/scripts/packages/bazel.sh
        # that originally invoked this script (this is what happens when you
        # run "bazel" in our workspace)
        exec -a "$0" "${BAZEL_REAL}" "$@"
    else
        # if BAZEL_REAL is not set, just invoke the default system bazel
        exec bazel "$@"
    fi
fi

VERSION=${OVERRIDE_BAZEL_VERSION:-$(< "$SCRIPT_DIR/../.bazelversion")}
echo "INFO: Running bazel wrapper (see //tools/bazel for details), bazel version $VERSION will be used instead of system-wide bazel installation." >&2

BASEURL_MIRROR="https://storage.googleapis.com/grpc-bazel-mirror/github.com/bazelbuild/bazel/releases/download"
BASEURL="https://github.com/bazelbuild/bazel/releases/download"
pushd "$(dirname "$0")" > /dev/null
# bazel binary will be downloaded to GIT_ROOT/tools directory by default
DOWNLOAD_DIR=${OVERRIDE_BAZEL_WRAPPER_DOWNLOAD_DIR:-$(pwd)}

case $(uname -sm) in
    "Linux x86_64")
        suffix=linux-x86_64
        ;;
    "Linux aarch64")
        suffix=linux-arm64
        ;;
    "Darwin x86_64")
        suffix=darwin-x86_64
        ;;
    "Darwin arm64")
        suffix=darwin-arm64
        ;;
    "MINGW"* | "MSYS_NT"*)
        suffix=windows-x86_64.exe
        ;;
    *)
        echo "Unsupported architecture: $(uname -sm)" >&2
        exit 1
        ;;
esac

filename="bazel-$VERSION-$suffix"
filename_abs="${DOWNLOAD_DIR}/${filename}"

if [ ! -x "${filename_abs}" ]; then
    # first try to download using mirror, fallback to download from github
    echo "Downloading bazel, will try URLs: ${BASEURL_MIRROR}/${VERSION}/${filename} ${BASEURL}/${VERSION}/${filename}" >&2
    curl --fail -L --output "${filename_abs}" "${BASEURL_MIRROR}/${VERSION}/${filename}" || curl --fail -L --output "${filename_abs}" "${BASEURL}/${VERSION}/${filename}"
    chmod a+x "${filename_abs}"
fi

! [ -f "$GIT_ROOT/requirements/bazel-pypi.lock.txt" ] && touch "$GIT_ROOT/requirements/bazel-pypi.lock.txt"

popd > /dev/null
exec "${filename_abs}" "$@"
