#!/bin/sh
set -eu

BASE_URL='https://ururur.ru'
DOWNLOAD_ROUTE='/download/console'
OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
ARCH="$(uname -m)"
case "$OS" in
  linux|darwin) ;;
  *) echo "Unsupported operating system: $OS" >&2; exit 1 ;;
esac
TERMUX=0
if [ "$OS" = "linux" ] && { [ -n "${TERMUX_VERSION:-}" ] || { [ -n "${PREFIX:-}" ] && printf '%s' "$PREFIX" | grep -qi '/com.termux/'; }; }; then
  TERMUX=1
fi
case "$ARCH" in
  x86_64|amd64) ARCH=amd64 ;;
  aarch64|arm64) ARCH=arm64 ;;
  *) echo "Unsupported architecture: $ARCH" >&2; exit 1 ;;
esac
USER_ID="$(id -u 2>/dev/null || printf '1')"
if [ "$TERMUX" = "1" ] && [ -n "${PREFIX:-}" ]; then
  BIN_DIR="${OCM_BIN_DIR:-$PREFIX/bin}"
  LIB_DIR="${OCM_LIB_DIR:-$PREFIX/lib/ocm}"
elif [ "$USER_ID" = "0" ]; then
  BIN_DIR="${OCM_BIN_DIR:-/usr/local/bin}"
  LIB_DIR="${OCM_LIB_DIR:-/usr/local/lib/ocm}"
else
  if [ -z "${HOME:-}" ]; then echo "HOME is not set; set OCM_BIN_DIR and OCM_LIB_DIR" >&2; exit 1; fi
  BIN_DIR="${OCM_BIN_DIR:-$HOME/.local/bin}"
  LIB_DIR="${OCM_LIB_DIR:-$HOME/.local/lib/ocm}"
fi
WRAPPER_PATH="$BIN_DIR/ocm"
BINARY_PATH="$LIB_DIR/ocm-console"
TMP_DIR="$(mktemp -d 2>/dev/null || mktemp -d -t ocm-console)"
cleanup() { rm -rf "$TMP_DIR"; }
trap cleanup EXIT INT TERM
BIN_URL="$BASE_URL$DOWNLOAD_ROUTE/bin/$OS/$ARCH"
BIN_PATH="$TMP_DIR/ocm-console"
if ! curl -fsSL "$BIN_URL" -o "$BIN_PATH"; then
  echo "Download failed: $BIN_URL" >&2
  echo "Detected platform: $OS/$ARCH" >&2
  exit 1
fi

chmod 755 "$BIN_PATH"
mkdir -p "$BIN_DIR" "$LIB_DIR"
mv "$BIN_PATH" "$BINARY_PATH"
ESCAPED_BASE_URL="$(printf '%s' "$BASE_URL" | sed 's/["\\]/\\&/g')"
ESCAPED_BINARY_PATH="$(printf '%s' "$BINARY_PATH" | sed 's/["\\]/\\&/g')"
{
  printf '%s\n' '#!/bin/sh'
  printf 'export OCM_SERVER_URL="%s"\n' "$ESCAPED_BASE_URL"
  printf 'exec "%s" "$@"\n' "$ESCAPED_BINARY_PATH"
} > "$WRAPPER_PATH"
chmod 755 "$WRAPPER_PATH" "$BINARY_PATH"
printf 'Installed %s\n' "$WRAPPER_PATH"
case ":${PATH:-}:" in
  *":$BIN_DIR:"*) ;;
  *) printf 'Add %s to PATH or run %s\n' "$BIN_DIR" "$WRAPPER_PATH" ;;
esac
