#!/usr/bin/env bash

set -eu -o pipefail
# -e: exits if a command fails
# -u: errors if an variable is referenced before being set
# -o pipefail: causes a pipeline to produce a failure return code if any command errors

readonly RULES_NODEJS_DIR=$(cd $(dirname "$0")/..; pwd)
source "${RULES_NODEJS_DIR}/scripts/packages.sh"

DEPS=()

# Check for WORKSPACE dependency on release dist
LINES=$(grep "/dist/build_bazel_rules_nodejs/release\"" WORKSPACE || echo "")
if [[ "${LINES}" ]] ; then
  DEPS+=(release)
fi

# Check for file:../../dist/npm_bazel_foobar dependencies in package.json
LINES=$(egrep -oh "file:../../dist/npm_bazel_([a-z_\-]+)" package.json || echo "")
for line in ${LINES[@]} ; do
  # Trim the match from `file:../../dist/npm_bazel_foobar` to `foobar`
  DEP=$(echo $line | cut -c 27-)
  DEPS+=(${DEP})
done

if [[ ${DEPS:-} ]] ; then
  ALL_GOOD=1

  echo "checking deps: ${DEPS}"
  for dep in ${DEPS} ; do
    if [[ ${dep} == "release" ]] ; then
      if [[ ! -d "${RULES_NODEJS_DIR}/dist/build_bazel_rules_nodejs" ]] ; then
          echo "ERROR: You must first run 'yarn build_release' to build /dist/build_bazel_rules_nodejs";
          ALL_GOOD=0
      fi
    else
      if [[ ! -d "${RULES_NODEJS_DIR}/dist/npm_bazel_${dep}" ]] ; then
        echo "ERROR: You must first run 'yarn build_packages ${dep}' or 'yarn build_packages_all'";
        ALL_GOOD=0
      fi
    fi
  done

  if [[ ${ALL_GOOD} -eq "0" ]] ; then
    echo "ERROR: Some dependencies are not built. Please build all dependencies and try again."
    exit 1
  else
    echo "all deps built"
  fi
fi