#!/bin/sh
set -eu

DEFAULT_PACKAGE="https://www.thisismonolith.com/downloads/monolith_cli-0.3.1-py3-none-any.whl"
REPO="${MONOLITH_CLI_REPO:-}"
REF="${MONOLITH_CLI_REF:-main}"
SUBDIRECTORY="${MONOLITH_CLI_SUBDIRECTORY:-}"
if [ -n "${MONOLITH_CLI_PACKAGE:-}" ]; then
  PACKAGE="$MONOLITH_CLI_PACKAGE"
elif [ -n "$REPO" ] && [ -n "$SUBDIRECTORY" ]; then
  PACKAGE="monolith-cli @ git+${REPO}@${REF}#subdirectory=${SUBDIRECTORY}"
elif [ -n "$SUBDIRECTORY" ]; then
  fail "MONOLITH_CLI_SUBDIRECTORY requires MONOLITH_CLI_REPO"
elif [ -n "$REPO" ]; then
  PACKAGE="monolith-cli @ git+${REPO}@${REF}"
else
  PACKAGE="$DEFAULT_PACKAGE"
fi
BIN_DIR="${MONOLITH_BIN_DIR:-$HOME/.local/bin}"
VENV_DIR="${MONOLITH_VENV_DIR:-$HOME/.local/share/monolith/venv}"

info() {
  printf '%s\n' "$*"
}

fail() {
  printf 'monolith install: %s\n' "$*" >&2
  exit 1
}

if ! command -v python3 >/dev/null 2>&1; then
  fail "python3 is required"
fi

PYTHON="python3"

install_with_pipx() {
  pipx install --force "$PACKAGE"
}

install_with_venv() {
  "$PYTHON" -m venv "$VENV_DIR"
  "$VENV_DIR/bin/python" -m pip install --upgrade pip
  "$VENV_DIR/bin/python" -m pip install --upgrade "$PACKAGE"
  mkdir -p "$BIN_DIR"
  ln -sf "$VENV_DIR/bin/monolith" "$BIN_DIR/monolith"
  ln -sf "$VENV_DIR/bin/monolith-mcp" "$BIN_DIR/monolith-mcp"
}

info "Installing Monolith CLI from: $PACKAGE"

if command -v pipx >/dev/null 2>&1; then
  install_with_pipx
else
  info "pipx not found; installing into $VENV_DIR"
  install_with_venv
fi

if [ -x "$BIN_DIR/monolith" ]; then
  "$BIN_DIR/monolith" --version
elif command -v monolith >/dev/null 2>&1; then
  monolith --version
else
  info "Installed. Add $BIN_DIR to PATH if 'monolith' is not found."
  info "Example: export PATH=\"$BIN_DIR:\$PATH\""
fi

info "Configure your API endpoint and key:"
info "  monolith config set api_url https://your-fleet-api.example.com"
info "  monolith config set api_key <your-api-key>"
