#!/usr/bin/env sh
set -eu

VERSION="${MERMAID_ENGINE_VERSION:-0.1.3}"
RELEASE_BASE_URL="${MERMAID_ENGINE_RELEASE_BASE_URL:-https://mermaidengine.com/releases/v$VERSION}"
DEFAULT_WHEEL_URL="$RELEASE_BASE_URL/mermaid_engine-$VERSION-py3-none-any.whl"
PYTHON_BIN="${PYTHON:-python3}"

if [ -n "${MERMAID_ENGINE_REPO:-}" ]; then
  PACKAGE_SPEC="$MERMAID_ENGINE_REPO"
elif [ -n "${MERMAID_ENGINE_PACKAGE:-}" ]; then
  PACKAGE_SPEC="$MERMAID_ENGINE_PACKAGE"
elif [ -n "${MERMAID_ENGINE_PACKAGE_URL:-}" ]; then
  PACKAGE_SPEC="$MERMAID_ENGINE_PACKAGE_URL"
else
  PACKAGE_SPEC="$DEFAULT_WHEEL_URL"
fi

printf '%s\n' 'Installing Mermaid Engine CLI tools...'
printf 'Package source: %s\n' "$PACKAGE_SPEC"

if command -v pipx >/dev/null 2>&1; then
  pipx install --force "$PACKAGE_SPEC"
else
  if ! command -v "$PYTHON_BIN" >/dev/null 2>&1; then
    printf '%s\n' 'python3 is required to install Mermaid Engine.' >&2
    exit 1
  fi

  VENV_DIR="${MERMAID_ENGINE_VENV:-$HOME/.local/share/mermaid-engine/venv}"
  USER_BIN="${MERMAID_ENGINE_BIN:-$HOME/.local/bin}"

  if ! "$PYTHON_BIN" -m venv "$VENV_DIR" >/dev/null 2>&1; then
    printf '%s\n' 'Unable to create a Python virtual environment for Mermaid Engine.' >&2
    printf '%s\n' 'Install python3-venv or pipx, then rerun this installer.' >&2
    exit 1
  fi

  "$VENV_DIR/bin/python" -m pip install --upgrade "$PACKAGE_SPEC"
  mkdir -p "$USER_BIN"
  for cmd in mdd-engine mdd-agent mdd; do
    ln -sf "$VENV_DIR/bin/$cmd" "$USER_BIN/$cmd"
  done
  PATH="$USER_BIN:$PATH"
  export PATH
fi

printf '\n%s\n' 'Verifying CLI entrypoints:'
for cmd in mdd-engine mdd-agent mdd; do
  if ! command -v "$cmd" >/dev/null 2>&1; then
    printf '%s\n' "Missing $cmd on PATH after install." >&2
    printf '%s\n' 'If you used the venv fallback, restart your shell or add ~/.local/bin to PATH.' >&2
    exit 1
  fi
  printf '  %s -> %s\n' "$cmd" "$(command -v "$cmd")"
  "$cmd" --help >/dev/null
done

printf '\n%s\n' 'Mermaid Engine installed successfully.'
printf '%s\n' 'Try:'
printf '%s\n' '  mdd-engine --help'
printf '%s\n' '  mdd-agent --help'
printf '%s\n' '  mdd --help'
