#!/usr/bin/env bash
# install_unix.sh — eai 一键安装脚本（Linux / macOS）
set -euo pipefail

BOLD="\033[1m"; GREEN="\033[0;32m"; YELLOW="\033[0;33m"; RED="\033[0;31m"; RESET="\033[0m"

info()  { echo -e "${GREEN}[✓]${RESET} $*"; }
warn()  { echo -e "${YELLOW}[!]${RESET} $*"; }
error() { echo -e "${RED}[✗]${RESET} $*" >&2; exit 1; }
step()  { echo -e "\n${BOLD}$*${RESET}"; }

# ─── 1. 依赖检查 ─────────────────────────────────────────────────────────────
step "1/5  检查依赖"

check_cmd() {
  if command -v "$1" &>/dev/null; then
    info "$1 已安装 ($(command -v "$1"))"
  else
    error "未找到 $1，请先安装后重试。"
  fi
}

check_cmd elixir
check_cmd mix
check_cmd python3

ELIXIR_VER=$(elixir --version | grep "Elixir" | awk '{print $2}')
info "Elixir $ELIXIR_VER"

# ─── 2. 环境变量检查 ──────────────────────────────────────────────────────────
step "2/5  检查环境变量"

if [[ -z "${OPENAI_API_KEY:-}" ]]; then
  warn "OPENAI_API_KEY 未设置。"
  read -rp "      请输入 API Key（直接回车跳过，稍后手动设置）: " INPUT_KEY
  if [[ -n "$INPUT_KEY" ]]; then
    export OPENAI_API_KEY="$INPUT_KEY"
    # 写入 ~/.profile（如已存在则跳过）
    if ! grep -q "OPENAI_API_KEY" ~/.profile 2>/dev/null; then
      echo "export OPENAI_API_KEY=\"$INPUT_KEY\"" >> ~/.profile
      info "已追加到 ~/.profile（重新登录或 source ~/.profile 后生效）"
    fi
  else
    warn "跳过。启动前请手动执行：export OPENAI_API_KEY=sk-..."
  fi
else
  info "OPENAI_API_KEY 已设置"
fi

# ─── 3. Python 依赖 ───────────────────────────────────────────────────────────
step "3/5  安装 Python 依赖"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PRIV_DIR="$(dirname "$SCRIPT_DIR")"
SCRIPTS_DIR="$PRIV_DIR/scripts"

if [[ -f "$SCRIPTS_DIR/requirements.txt" ]]; then
  python3 -m pip install --quiet -r "$SCRIPTS_DIR/requirements.txt"
  info "Python 依赖安装完成"
else
  python3 -m pip install --quiet numpy scipy 2>/dev/null && info "numpy + scipy 已安装" || warn "pip 安装失败，请手动安装 numpy scipy"
fi

# ─── 4. Mix 依赖 & 编译 ────────────────────────────────────────────────────────
step "4/5  获取 Mix 依赖并编译"

cd "$(dirname "$PRIV_DIR")"   # 项目根目录
mix deps.get --quiet
info "deps.get 完成"
mix compile --quiet
info "编译完成"

# ─── 5. 工作目录 ─────────────────────────────────────────────────────────────
step "5/5  准备运行时目录"

WORK_DIR="${EAI_WORK_DIR:-/home/eai_agents}"
if [[ ! -d "$WORK_DIR" ]]; then
  mkdir -p "$WORK_DIR" && info "创建工作目录 $WORK_DIR" || warn "无法创建 $WORK_DIR，请手动创建或设置 EAI_WORK_DIR"
else
  info "工作目录已存在：$WORK_DIR"
fi

echo ""
echo -e "${GREEN}${BOLD}安装完成！${RESET}"
echo ""
echo "启动方式："
echo "  iex -S mix               # 交互式 shell"
echo "  mix run --no-halt        # 后台运行"
echo ""
echo "可选环境变量覆盖默认配置："
echo "  EAI_LLM_URL      LLM 接口地址（默认 DeepSeek）"
echo "  EAI_LLM_MODEL    模型名称"
echo "  EAI_LLM_TIMEOUT  请求超时（毫秒）"
echo "  EAI_WORK_DIR     PTY 工作目录根路径"