#!/bin/bash
# ============================================================================
# OPC Agent 一键安装脚本 (macOS / Linux / WSL)
# 用法: curl -fsSL https://raw.githubusercontent.com/Deepleaper/opc-agent/main/install.sh | bash
# 高级: curl -fsSL ... | bash -s -- --no-ollama
# ============================================================================

set -e

# ── 颜色 & Emoji ──────────────────────────────────────────────
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m'
info()  { echo -e "${CYAN}ℹ️  $1${NC}"; }
ok()    { echo -e "${GREEN}✅ $1${NC}"; }
warn()  { echo -e "${YELLOW}⚠️  $1${NC}"; }
err()   { echo -e "${RED}❌ $1${NC}"; }
step()  { echo -e "\n${BLUE}${BOLD}━━━ $1 ━━━${NC}"; }

# ── 参数解析 ──────────────────────────────────────────────────
SKIP_OLLAMA=false
for arg in "$@"; do
  case "$arg" in
    --no-ollama) SKIP_OLLAMA=true ;;
  esac
done

# ── Banner ────────────────────────────────────────────────────
echo -e "${BOLD}${CYAN}"
echo "   ___  ____   ____      _                    _"
echo "  / _ \|  _ \ / ___|    / \   __ _  ___ _ __ | |_"
echo " | | | | |_) | |       / _ \ / _\` |/ _ \\ '_ \\| __|"
echo " | |_| |  __/| |___   / ___ \\ (_| |  __/ | | | |_"
echo "  \___/|_|    \____| /_/   \_\__, |\___|_| |_|\__|"
echo "                             |___/"
echo -e "${NC}"
info "一键安装 OPC Agent — 瞬知 Studio"
echo ""

# ── 检测操作系统 ──────────────────────────────────────────────
step "🔍 检测操作系统 / Detecting OS"
OS="unknown"
if [[ "$OSTYPE" == "darwin"* ]]; then
  OS="macos"; ok "macOS detected"
elif grep -qi microsoft /proc/version 2>/dev/null; then
  OS="wsl"; ok "WSL (Windows Subsystem for Linux) detected"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
  OS="linux"; ok "Linux detected"
else
  err "不支持的操作系统 / Unsupported OS: $OSTYPE"
  err "修复建议 / Fix: 请使用 macOS、Linux 或 WSL"
  exit 1
fi

# ── 检测 Node.js ─────────────────────────────────────────────
step "📦 检测 Node.js (>=18) / Checking Node.js"

if ! command -v node &>/dev/null || [ "$(node -v | sed 's/v//' | cut -d. -f1)" -lt 18 ]; then
    echo "📦 Auto-installing Node.js..."
    if command -v brew &>/dev/null; then
        brew install node
    elif command -v apt-get &>/dev/null; then
        curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
        sudo apt-get install -y nodejs
    elif command -v dnf &>/dev/null; then
        sudo dnf install -y nodejs
    elif command -v yum &>/dev/null; then
        curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
        sudo yum install -y nodejs
    elif command -v pacman &>/dev/null; then
        sudo pacman -S --noconfirm nodejs npm
    else
        echo "❌ Cannot auto-install Node.js. Please install manually: https://nodejs.org/"
        exit 1
    fi
else
  ok "Node.js $(node -v) ✓"
fi

# ── 检测 npm ─────────────────────────────────────────────────
if ! command -v npm &>/dev/null; then
  err "未检测到 npm / npm not found"
  err "修复建议 / Fix: 重新安装 Node.js (npm 会一并安装)"
  exit 1
fi

# ── 安装 OPC Agent ────────────────────────────────────────────
step "🚀 安装 OPC Agent / Installing OPC Agent"
info "运行 npm install -g opc-agent ..."
if ! npm install -g opc-agent; then
  err "全局安装失败 / Global install failed"
  info "如果是权限问题，请选择以下任一方法 / If a permissions error, try one of:"
  echo "  1) 使用 npx（无需全局安装）/ Use npx (no global install needed):"
  echo "       npx opc-agent <command>"
  echo "  2) 配置 npm 使用用户目录 / Configure npm to use a user directory:"
  echo "       npm config set prefix ~/.npm-global"
  echo "       export PATH=\"\$HOME/.npm-global/bin:\$PATH\""
  echo "       npm install -g opc-agent"
  exit 1
fi

OPC_VER=$(opc --version 2>/dev/null || echo "unknown")
ok "OPC Agent v${OPC_VER} 安装成功 / installed successfully"

# ── 初始化 ────────────────────────────────────────────────────
step "⚙️  初始化 OPC Agent / Initializing"
info "运行 opc init --yes ..."
opc init --yes && ok "初始化完成 / initialized" || warn "初始化跳过（可能已初始化）/ init skipped (may already exist)"

# ── 进入项目目录后再检查 ──────────────────────────────────────
# opc init creates my-agent/ by default; cd into it for doctor
if [ -d "my-agent" ]; then
  cd my-agent
  info "已进入 my-agent/ 目录 / Entered my-agent/ directory"
fi

# ── 环境检查 ──────────────────────────────────────────────────
step "🩺 环境检查 / Running Doctor"
info "运行 opc doctor ..."
opc doctor || warn "部分检查未通过，请查看上方输出 / Some checks failed, see above"

# ── Ollama（可选）─────────────────────────────────────────────
if ! $SKIP_OLLAMA; then
  step "🦙 安装 Ollama / Installing Ollama"

  if command -v ollama &>/dev/null; then
    ok "Ollama 已安装 / installed ✓"
  else
    echo "🦙 Auto-installing Ollama..."
    curl -fsSL https://ollama.com/install.sh | sh
  fi

  # Pull only starter models for instant setup (<1GB, ~1 min)
  echo "📦 Pulling starter models (fast setup)..."
  ollama pull qwen2.5:0.5b
  ollama pull nomic-embed-text

  echo ""
  echo "💡 入门模型已就绪。运行 opc studio 可升级到推荐模型。"
  echo "💡 Starter models ready. Run 'opc studio' to upgrade to recommended models for your hardware."
fi

# ── 完成 ──────────────────────────────────────────────────────
step "🎉 安装完成！/ Installation Complete!"
echo ""
echo -e "${GREEN}┌──────────────────────────────────────────────────────┐${NC}"
echo -e "${GREEN}│                                                      │${NC}"
echo -e "${GREEN}│  🎊 OPC Agent 已就绪！/ OPC Agent is ready!          │${NC}"
echo -e "${GREEN}│                                                      │${NC}"
echo -e "${GREEN}│  👉 现在开始 / Get started NOW:                      │${NC}"
echo -e "${GREEN}│                                                      │${NC}"
echo -e "${GREEN}│    cd my-agent          📂 进入项目目录              │${NC}"
echo -e "${GREEN}│    opc run              🚀 启动 Agent                │${NC}"
echo -e "${GREEN}│                                                      │${NC}"
echo -e "${GREEN}│  启动后访问 / After start:                           │${NC}"
echo -e "${GREEN}│    http://localhost:3000  💬 Web 聊天 / Chat         │${NC}"
echo -e "${GREEN}│    http://localhost:4000  🎨 Studio 管理面板         │${NC}"
echo -e "${GREEN}│                                                      │${NC}"
echo -e "${GREEN}│  更多命令 / More commands:                           │${NC}"
echo -e "${GREEN}│    opc chat             💬 终端聊天 / Terminal chat  │${NC}"
echo -e "${GREEN}│    opc doctor           🩺 环境检查 / Health check   │${NC}"
echo -e "${GREEN}│    opc --help           📖 查看帮助 / Help           │${NC}"
echo -e "${GREEN}│                                                      │${NC}"
echo -e "${GREEN}│  文档 / Docs: https://github.com/Deepleaper/opc-agent│${NC}"
echo -e "${GREEN}│                                                      │${NC}"
echo -e "${GREEN}└──────────────────────────────────────────────────────┘${NC}"
echo ""
