#!/bin/bash
set -euo pipefail

# ===================== 配置区 =====================
PROJECT_DIR="$HOME/hermes-agent"
# 依赖映射表：Python包 → 对应Ubuntu系统依赖
declare -A PKG_MAP=(
  ["pydantic"]="rustc cargo"
  ["cryptography"]="libssl-dev libffi-dev"
  ["numpy"]="libopenblas-dev liblapack-dev libatlas-base-dev"
  ["pillow"]="libjpeg-dev libpng-dev zlib1g-dev"
  ["uvicorn"]="libuv1-dev"
  ["faster-whisper"]="cmake ninja-build"
  ["sounddevice"]="portaudio19-dev"
  ["mautrix"]="libolm-dev"
)
# ==================================================

# proot/Termux 兼容：禁止硬链接，强制复制模式
export UV_LINK_MODE=copy

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 1. 检测系统架构
ARCH=$(uname -m)
echo -e "\n${GREEN}===== 检测系统环境 =====${NC}"
if [[ "$ARCH" == "aarch64" ]]; then
  echo -e "${GREEN}✅ 检测到：ARM64 手机/安卓Ubuntu 环境${NC}"
elif [[ "$ARCH" == "x86_64" ]]; then
  echo -e "${GREEN}✅ 检测到：x86_64 电脑/服务器Ubuntu 环境${NC}"
else
  echo -e "${RED}❌ 不支持的架构：$ARCH${NC}"
  exit 1
fi

# 2. 检测操作系统
if grep -qi "ubuntu" /etc/os-release 2>/dev/null; then
  UBUNTU_VER=$(grep -oP '(?<=VERSION_ID=")[^"]+' /etc/os-release)
  echo -e "${GREEN}✅ Ubuntu $UBUNTU_VER${NC}"
elif grep -qi "termux" /system/build.prop 2>/dev/null || [[ -d /data/data/com.termux ]]; then
  echo -e "${GREEN}✅ Termux (Android) 环境${NC}"
else
  echo -e "${YELLOW}⚠ 未知系统，继续尝试安装...${NC}"
fi

# 3. 检测 Python 版本
echo -e "\n${GREEN}===== 检查 Python 版本 =====${NC}"
if command -v python3 &>/dev/null; then
  PY_VER=$(python3 --version 2>&1 | grep -oP '\d+\.\d+')
  echo "当前 Python：$PY_VER"
  if (( $(echo "$PY_VER < 3.11" | bc -l 2>/dev/null || echo 1) )); then
    echo -e "${YELLOW}⚠ 需要 Python >= 3.11，尝试安装...${NC}"
    NEED_PYTHON_UPGRADE=true
  else
    echo -e "${GREEN}✅ Python $PY_VER 满足要求${NC}"
    NEED_PYTHON_UPGRADE=false
  fi
else
  echo -e "${YELLOW}⚠ 未检测到 Python3，将安装${NC}"
  NEED_PYTHON_UPGRADE=true
fi

# 4. 确认当前目录为项目目录
echo -e "\n${GREEN}===== 确认项目目录 =====${NC}"
if [[ -f pyproject.toml ]]; then
  echo -e "${GREEN}✅ 当前目录：$(pwd)${NC}"
  echo "（检测到 pyproject.toml）"
else
  echo -e "${YELLOW}⚠ 当前目录未找到 pyproject.toml${NC}"
  echo "检查上级目录..."
  if [[ -f ../pyproject.toml ]]; then
    cd ..
    echo -e "${GREEN}✅ 切换至：$(pwd)${NC}"
  else
    echo -e "${RED}❌ 请将脚本放在 hermes-agent 项目目录下运行${NC}"
    exit 1
  fi
fi

# 5. 更新系统源
if command -v apt &>/dev/null; then
  echo -e "\n${GREEN}===== 系统编译工具 =====${NC}"
  apt update -y
  apt install -y build-essential cmake ninja-build git wget curl

  # 6. 安装/升级 Python
  if [[ "$NEED_PYTHON_UPGRADE" == true ]]; then
    echo -e "\n${GREEN}===== 安装 Python 3.11 =====${NC}"
    if [[ "$ARCH" == "aarch64" ]]; then
      apt install -y python3-full python3-dev python3-pip
    else
      if ! command -v python3.11 &>/dev/null && ! command -v python3.12 &>/dev/null; then
        apt install -y software-properties-common
        add-apt-repository -y ppa:deadsnakes/ppa
        apt update -y
        apt install -y python3.11 python3.11-dev python3.11-venv python3.11-distutils
        update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
      fi
    fi
  fi
  apt install -y python3-pip python3-dev

  # 7. 解析依赖并安装系统编译依赖
  echo -e "\n${GREEN}===== 项目依赖系统前置检查 =====${NC}"
  DEPS=$(grep -E '^[a-zA-Z0-9_-]+ = ' pyproject.toml | cut -d'=' -f1 | tr -d ' ' | sort -u)
  echo "项目依赖的 Python 包：$DEPS"

  SYS_DEPS=""
  for py_pkg in $DEPS; do
    if [[ -n "${PKG_MAP[$py_pkg]-}" ]]; then
      SYS_DEPS+="${PKG_MAP[$py_pkg]} "
    fi
  done
  SYS_DEPS_UNIQ=$(echo $SYS_DEPS | tr ' ' '\n' | sort -u | tr '\n' ' ')
  if [[ -n "$SYS_DEPS_UNIQ" ]]; then
    echo -e "${GREEN}→ 安装系统编译依赖：$SYS_DEPS_UNIQ${NC}"
    apt install -y $SYS_DEPS_UNIQ
  else
    echo -e "${GREEN}✅ 无需额外系统依赖${NC}"
  fi
fi

# 8. 安装 uv (包管理器)
echo -e "\n${GREEN}===== 安装 uv 包管理器 =====${NC}"
if ! command -v uv &>/dev/null; then
  curl -LsSf https://astral.sh/uv/install.sh | sh
  if [[ -f "$HOME/.cargo/env" ]]; then
    source "$HOME/.cargo/env"
  fi
  export PATH="$HOME/.cargo/bin:$PATH"
fi
uv --version

# 9. 清理旧虚拟环境
echo -e "\n${GREEN}===== 清理旧虚拟环境 =====${NC}"
for dir in .venv venv __pycache__ build dist *.egg-info .pytest_cache .ruff_cache; do
  if [[ -e "$dir" ]]; then
    rm -rf "$dir"
    echo "已清除：$dir"
  fi
done

# 10. 创建虚拟环境并安装依赖
echo -e "\n${GREEN}===== 全新安装 Hermes 依赖 =====${NC}"
uv venv --python 3.11
source .venv/bin/activate

echo "安装基础依赖..."
uv pip install -e '.[all]' 2>&1 | tail -10

# 11. 验证安装
echo -e "\n${GREEN}===== 安装验证 =====${NC}"
if python -c "from hermes_cli import main; print('✅ Hermes Agent 安装验证通过')" 2>/dev/null; then
  echo -e "${GREEN}"
  echo "=============================================="
  echo "  Hermes Agent 安装完成！"
  echo "  项目目录：$(pwd)"
  echo "  使用命令：hermes --help"
  echo "=============================================="
  echo -e "${NC}"
else
  echo -e "${YELLOW}⚠ 验证失败，常见检查：${NC}"
  python -c "import openai; print('  openai ✅')" 2>/dev/null || echo "  openai ❌"
  python -c "import anthropic; print('  anthropic ✅')" 2>/dev/null || echo "  anthropic ❌"
  echo -e "\n${YELLOW}可手动重试：${NC}"
  echo "  source .venv/bin/activate"
  echo "  uv pip install -e ."
fi
