#!/usr/bin/env bash
# Shared backend selection helpers for Cargo-default / BuildBuddy-opt-in gates.

meerkat_buildbuddy_enabled() {
  case "${MEERKAT_BUILDBUDDY:-}" in
    1|true|TRUE|yes|YES|on|ON|buildbuddy)
      return 0
      ;;
    *)
      return 1
      ;;
  esac
}

meerkat_selected_build_backend() {
  if meerkat_buildbuddy_enabled; then
    printf 'buildbuddy\n'
  else
    printf 'cargo\n'
  fi
}

meerkat_discover_local_secrets_env() {
  local root dir parent
  root="${1:-}"
  if [[ -z "${root}" ]]; then
    root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
  fi

  if [[ -n "${MEERKAT_SECRETS_ENV:-}" ]]; then
    if [[ -f "${MEERKAT_SECRETS_ENV}" ]]; then
      printf '%s\n' "${MEERKAT_SECRETS_ENV}"
    else
      echo "warning: MEERKAT_SECRETS_ENV points to a missing file: ${MEERKAT_SECRETS_ENV}" >&2
    fi
    return 0
  fi

  dir="${root}"
  while [[ -n "${dir}" && "${dir}" != "/" ]]; do
    if [[ -f "${dir}/secrets.env" ]]; then
      printf '%s\n' "${dir}/secrets.env"
      return 0
    fi
    if [[ -n "${HOME:-}" && "${dir}" == "${HOME}" ]]; then
      return 0
    fi
    parent="$(dirname "${dir}")"
    if [[ "${parent}" == "${dir}" ]]; then
      return 0
    fi
    dir="${parent}"
  done
}

meerkat_secret_env_key_allowed() {
  case "$1" in
    ANTHROPIC_*|OPENAI_*|GEMINI_*|GOOGLE_*|MEERKAT_E2E_*|RKAT_*|SMOKE_*|CLAUDE_CODE_OAUTH_TOKEN|BUILDBUDDY_API_KEY)
      return 0
      ;;
    *)
      return 1
      ;;
  esac
}

meerkat_load_local_secrets_env() {
  local root secrets_env loaded_env line key value
  root="${1:-}"
  secrets_env="$(meerkat_discover_local_secrets_env "${root}")"
  if [[ -z "${secrets_env}" ]]; then
    return 0
  fi

  if ! loaded_env="$(
    set +u
    set -a
    # shellcheck disable=SC1090
    source "${secrets_env}" >/dev/null
    env
  )"; then
    echo "warning: failed to load local secrets env from ${secrets_env}" >&2
    return 0
  fi

  while IFS= read -r line; do
    key="${line%%=*}"
    value="${line#*=}"
    if [[ "${key}" == "${line}" ]]; then
      continue
    fi
    if meerkat_secret_env_key_allowed "${key}" && [[ -z "${!key:-}" ]]; then
      export "${key}=${value}"
    fi
  done <<< "${loaded_env}"
}
