#! /usr/bin/env bash

BUILDIFIER_SHORT_PATH=@@BUILDIFIER_SHORT_PATH@@
ARGS=@@ARGS@@
WORKSPACE="@@WORKSPACE@@"

# Get the absolute path to the buildifier executable
buildifier_short_path=$(readlink "$BUILDIFIER_SHORT_PATH")

# Use TEST_WORKSPACE to determine if the script is being ran under a test
if [[ ! -z "${TEST_WORKSPACE+x}" && -z "${BUILD_WORKSPACE_DIRECTORY+x}" ]]; then
  FIND_FILE_TYPE="l"
  # If WORKSPACE was provided, then the script is being run under a test in no_sandbox mode
  if [[ ! -z "${WORKSPACE:+x}" ]]; then
    FIND_FILE_TYPE="f"

    # resolve the WORKSPACE symlink
    # use `realpath` if available and `readlink` otherwise (typically macOS)
    if command -v realpath &> /dev/null; then
        WORKSPACE_LINK="$(realpath ${WORKSPACE})"
    elif command -v readlink &> /dev/null; then
        WORKSPACE_LINK="$(readlink ${WORKSPACE})"
    else
        echo "Unable to resolve symlink (WORKSPACE: ${WORKSPACE})"
        exit 1
    fi

    # Find the directory containing the WORKSPACE file
    WORKSPACE_PATH="$(dirname "$WORKSPACE_LINK")"

    # Change the working directory to the WORKSPACE parent
    if ! cd "$WORKSPACE_PATH" ; then
      echo "Unable to change to workspace (WORKSPACE_PATH: ${WORKSPACE_PATH})"
    fi
  fi
else
  # Change into the workspace directory if this is _not_ a test
  if ! cd "$BUILD_WORKSPACE_DIRECTORY"; then
    echo "Unable to change to workspace (BUILD_WORKSPACE_DIRECTORY: ${BUILD_WORKSPACE_DIRECTORY})"
    exit 1
  fi
fi

# Run buildifier on all starlark files
find . \
  -type "${FIND_FILE_TYPE:-f}" \
  @@EXCLUDE_PATTERNS@@ \
  \( -name '*.bzl' \
    -o -name '*.sky' \
    -o -name BUILD.bazel \
    -o -name BUILD \
    -o -name '*.BUILD' \
    -o -name 'BUILD.*.bazel' \
    -o -name 'BUILD.*.oss' \
    -o -name MODULE.bazel \
    -o -name '*.MODULE.bazel' \
    -o -name WORKSPACE \
    -o -name WORKSPACE.bazel \
    -o -name WORKSPACE.oss \
    -o -name WORKSPACE.bzlmod \
    -o -name 'WORKSPACE.*.bazel' \
    -o -name 'WORKSPACE.*.oss' \
  \) -print | xargs "$buildifier_short_path" "${ARGS[@]}"
