#!/usr/bin/env bash

set -e
# shellcheck disable=SC1091
source "bin/deps"

#——————————————————————————————  OS-X SPECIFIC INSTALLERS —————————————————————————

__setup::brew-validate() {
  # Homebrew is required to install Bazel
  if ! brew help >/dev/null; then
    echo "brew is not installed, please install from https://brew.sh"
  else
    info: "Homebrew is already installed."
  fi
}

__setup::brew-install-jdk() {
  # The JDK homebrew cask is a required to install the java dependencies for Bazel
  if ! brew cask list | grep -q openjdk; then
    run "brew cask install homebrew/cask-versions/adoptopenjdk8"
  else
    info: "JDK already installed."
  fi
}

__setup::brew-deps() {
  lib::brew::install::packages 'xz' 'ydiff'
}

__setup::is-bazelisk-installed() {
  /bin/ls -al "$(command -v bazel)" | grep -q bazelisk
}

#——————————————————————————————  PUBLIC INTERFACE —————————————————————————

setup::brew() {
  __setup::brew-validate
  __setup::brew-install-jdk
  __setup::brew-deps
}

setup::xcode-tools() {
  # xcode command line tools are required, specifically gcc
  # if xcode already exists, this command will error, otherwise prompt the user
  if [[ -n $(xcode-select --install 2>&1) ]]; then
    info: "xcode-select tools are already installed."
  fi
}

setup::bazelisk() {
  if __setup::is-bazelisk-installed; then
    info: "Bazelisk is already installed."
  else
    run "brew install bazelbuild/tap/bazelisk"
  fi
}

setup::darwin() {
  setup::xcode-tools
  setup::brew
  setup::bazelisk
}
