#!/usr/bin/env bash
set -euo pipefail
BASE_URL="https://bot.ahvclaw.com/downloads/telegram-cli-bot-setup"
ZIP_URL="$BASE_URL/telegram-cli-bot-setup-v3.zip?v=$(date +%s)"
TMP_DIR="$(mktemp -d)"
cleanup(){ rm -rf "$TMP_DIR"; }
run_root(){ if [ "$(id -u)" -eq 0 ]; then "$@"; elif command -v sudo >/dev/null 2>&1; then sudo "$@"; else return 1; fi; }
trap cleanup EXIT
cd "$TMP_DIR"
echo "== AHV CLI Bot installer =="
ask_required() {
  local var="$1" prompt="$2" val=""
  val="${!var:-}"
  if [ -n "$val" ]; then
    return 0
  fi
  if [ -t 0 ]; then
    read -r -p "$prompt" val
    printf -v "$var" '%s' "$val"
    export "$var"
    return 0
  fi
  echo "[ERROR] Missing $var for non-interactive install."
  echo "Run from an interactive shell, or set INSTALL_BOT_CHOICE plus TG_TOKEN/CODEX_TG_TOKEN/CLAUDE_TG_TOKEN."
  exit 2
}
ask_optional() {
  local var="$1" prompt="$2" def="$3" val=""
  val="${!var:-}"
  if [ -n "$val" ]; then
    export "$var"
    return 0
  fi
  if [ -t 0 ]; then
    read -r -p "$prompt [$def]: " val
    val="${val:-$def}"
  else
    val="$def"
  fi
  printf -v "$var" '%s' "$val"
  export "$var"
}
echo "1) Codex bot"
echo "2) Claude bot"
echo "3) Both"
CHOICE="${INSTALL_BOT_CHOICE:-${BOT_CHOICE:-}}"
ask_required CHOICE "Choose [1/2/3]: "
ask_optional INSTALL_MEMORY_TENCENTDB "Install memory-tencentdb with OpenAI embeddings + AHV LLM?" "1"
INSTALL_MEMORY_TENCENTDB="${INSTALL_MEMORY_TENCENTDB:-1}"
export INSTALL_MEMORY_TENCENTDB
if [ "$INSTALL_MEMORY_TENCENTDB" = "1" ]; then
  if [ -z "${OPENAI_API_KEY:-}" ]; then
    read -r -s -p "OpenAI API key for memory embeddings: " OPENAI_API_KEY
    echo
    export OPENAI_API_KEY
  fi
  if [ -z "${AHV_API_KEY:-}" ]; then
    read -r -s -p "AHV API key for memory LLM extraction: " AHV_API_KEY
    echo
    export AHV_API_KEY
  fi
fi
if command -v curl >/dev/null 2>&1; then
  curl -fL "$ZIP_URL" -o setup.zip
elif command -v wget >/dev/null 2>&1; then
  wget -O setup.zip "$ZIP_URL"
else
  echo "[ERROR] Need curl or wget"; exit 1
fi
if ! command -v unzip >/dev/null 2>&1 && ! command -v python3 >/dev/null 2>&1; then
  echo "[INFO] Installing unzip for archive extraction..."
  if command -v apt-get >/dev/null 2>&1; then run_root apt-get update && run_root apt-get install -y unzip
  elif command -v dnf >/dev/null 2>&1; then run_root dnf install -y unzip
  elif command -v yum >/dev/null 2>&1; then run_root yum install -y unzip
  else echo "[ERROR] Need unzip or python3 to extract setup.zip"; exit 1
  fi
fi
if command -v unzip >/dev/null 2>&1; then
  unzip -q setup.zip
elif command -v python3 >/dev/null 2>&1; then
  python3 - <<'PY'
import zipfile
zipfile.ZipFile('setup.zip').extractall('.')
PY
else
  echo "[ERROR] Need unzip or python3 to extract setup.zip"; exit 1
fi
chmod +x install-codex-bot-linux.sh install-claude-bot-linux.sh install-memory-tencentdb-linux.sh install-auto-update-linux.sh install-package-update-linux.sh
case "${CHOICE:-3}" in
  1) TG_TOKEN="${CODEX_TG_TOKEN:-${TG_TOKEN:-}}" ./install-codex-bot-linux.sh ;;
  2) TG_TOKEN="${CLAUDE_TG_TOKEN:-${TG_TOKEN:-}}" ./install-claude-bot-linux.sh ;;
  3) TG_TOKEN="${CODEX_TG_TOKEN:-${TG_TOKEN:-}}" ./install-codex-bot-linux.sh; TG_TOKEN="${CLAUDE_TG_TOKEN:-${TG_TOKEN:-}}" ./install-claude-bot-linux.sh ;;
  *) echo "[ERROR] Invalid choice"; exit 1 ;;
esac
