#!/usr/bin/env bash
set -euo pipefail

trim() {
  local s="${1:-}"
  s="${s#"${s%%[![:space:]]*}"}"
  s="${s%"${s##*[![:space:]]}"}"
  printf "%s" "$s"
}

to_lower() {
  printf "%s" "$1" | tr '[:upper:]' '[:lower:]'
}

bool_from_env() {
  local raw="${1:-}"
  local name="${2:-}"
  local default="${3:-false}"

  raw="$(trim "$raw")"
  if [[ -z "$raw" ]]; then
    [[ "$default" == "true" ]]
    return $?
  fi

  local lowered
  lowered="$(to_lower "$raw")"
  case "$lowered" in
    true) return 0 ;;
    false) return 1 ;;
    *)
      echo "xh-stub: warning: ${name} must be true|false (got: ${raw}); treating as false" >&2
      return 1
      ;;
  esac
}

if ! bool_from_env "${CODEX_XH_STUB_MODE_ENABLED:-}" "CODEX_XH_STUB_MODE_ENABLED" "false"; then
  echo "error: xh is blocked by script regression tests" >&2
  exit 90
fi

log_dir="${CODEX_STUB_LOG_DIR:-}"
if [[ -n "$log_dir" ]]; then
  mkdir -p "$log_dir"
  printf "%s\n" "xh $*" >>"${log_dir%/}/xh.calls.txt"
fi

body_file="${CODEX_XH_STUB_BODY_FILE:-}"
body="${CODEX_XH_STUB_BODY:-{\"data\":{}}}"

if [[ -n "$body_file" && -f "$body_file" ]]; then
  cat "$body_file"
else
  printf "%s" "$body"
fi

exit 0
