#!/usr/bin/env bash
# File: bin/invoke
# Purpose: Cross-shell wrapper exposing the Python invoke hub without requiring GNU Make.

set -euo pipefail

SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
ROOT_DIR="$( cd -- "${SCRIPT_DIR}/.." &> /dev/null && pwd )"
PYTHON_BIN="${PYTHON:-}"

if [[ -z "${PYTHON_BIN}" ]]; then
  # Windows: Prefer 'py' launcher over 'python3' to avoid Windows Store stub
  if command -v py >/dev/null 2>&1; then
    PYTHON_BIN="$(command -v py)"
    # Use py launcher with -3 flag
    exec "${PYTHON_BIN}" -3 "${ROOT_DIR}/scripts/tooling/invoke.py" "$@"
  elif command -v python3 >/dev/null 2>&1; then
    # Verify python3 is not Windows Store stub
    if python3 --version >/dev/null 2>&1; then
      PYTHON_BIN="$(command -v python3)"
    fi
  fi

  # Fallback to 'python' if nothing else works
  if [[ -z "${PYTHON_BIN}" ]] && command -v python >/dev/null 2>&1; then
    PYTHON_BIN="$(command -v python)"
  fi

  if [[ -z "${PYTHON_BIN}" ]]; then
    echo "bin/invoke: Python executable not found. Set \$PYTHON or install Python 3.8+." >&2
    exit 1
  fi
fi

exec "${PYTHON_BIN}" "${ROOT_DIR}/scripts/tooling/invoke.py" "$@"