#!/bin/bash
set -euo pipefail

# MyAgent Uninstaller for macOS and Linux
# 卸载脚本
#
# 用法:
#   curl -fsSL https://raw.githubusercontent.com/ctz168/myagent/main/install/uninstall.sh | bash
#   curl -fsSL ... | bash -s -- --purge          # 同时删除数据和虚拟环境
#   curl -fsSL ... | bash -s -- --dry-run          # 预览模式

BOLD='\033[1m'
ACCENT='\033[36m'
INFO='\033[90m'
SUCCESS='\033[32m'
WARN='\033[33m'
ERROR='\033[31m'
NC='\033[0m'

PURGE=false
DRY_RUN=false
FORCE=false
SCRIPT_URL="https://raw.githubusercontent.com/ctz168/myagent/main/install/uninstall.sh"
PKG_NAME="myagent-ai"
DATA_DIR="$HOME/.myagent"

for arg in "$@"; do
  case "$arg" in
    --purge)    PURGE=true ;;
    --dry-run)   DRY_RUN=true ;;
    --force|-f)  FORCE=true ;;
    --help|-h)
      echo "MyAgent Uninstaller"
      echo ""
      echo "Usage: curl -fsSL $SCRIPT_URL | bash [-s -- OPTIONS]"
      echo ""
      echo "Options:"
      echo "  --purge     同时删除所有数据（配置、记忆、Agent、虚拟环境等）"
      echo "  --force     跳过确认提示"
      echo "  --dry-run   预览卸载过程，不实际执行"
      echo ""
      echo "默认只卸载 npm 包，保留数据和虚拟环境。"
      echo "使用 --purge 可清除所有 MyAgent 相关文件。"
      exit 0
      ;;
    *) echo "Unknown option: $arg (use --help)"; exit 2 ;;
  esac
done

info()    { echo -e "${INFO}[i]${NC} $*"; }
success() { echo -e "${SUCCESS}[✓]${NC} $*"; }
warn()    { echo -e "${WARN}[!]${NC} $*"; }
err()     { echo -e "${ERROR}[✗]${NC} $*" >&2; }
step()    { echo -e "${ACCENT}[*]${NC} $*"; }

echo ""
echo -e "  ${BOLD}${ACCENT}MyAgent${NC} Uninstaller"
echo ""

if $DRY_RUN; then
  success "Dry run mode"
  info "Will: stop process -> npm uninstall -> optionally purge data"
  exit 0
fi

# ── Step 1: 停止运行中的 MyAgent 进程 ──────────────
step "Stopping MyAgent processes..."

stopped=false

# 尝试通过 API 优雅关闭
if curl -sf http://127.0.0.1:8767/api/shutdown -X POST >/dev/null 2>&1; then
  success "MyAgent 服务已优雅关闭"
  stopped=true
  sleep 2
fi

# 检查并终止残留进程
pids=$(pgrep -f "myagent" 2>/dev/null || true)
if [ -n "$pids" ]; then
  info "发现残留进程: $pids"
  for pid in $pids; do
    kill "$pid" 2>/dev/null || true
  done
  sleep 1
  # 强制终止
  pids=$(pgrep -f "myagent" 2>/dev/null || true)
  if [ -n "$pids" ]; then
    warn "部分进程需要强制终止"
    kill -9 $pids 2>/dev/null || true
  fi
  success "MyAgent 进程已停止"
else
  success "没有运行中的 MyAgent 进程"
fi

# ── Step 2: 卸载 npm 全局包 ─────────────────────
step "Uninstalling $PKG_NAME from npm global..."

if npm list -g "$PKG_NAME" >/dev/null 2>&1; then
  npm uninstall -g "$PKG_NAME"
  success "$PKG_NAME 已从 npm 全局卸载"
else
  info "$PKG_NAME 未通过 npm 全局安装（可能是源码方式安装）"
fi

# ── Step 3: 清理可选数据（--purge） ─────────────
if $PURGE; then
  echo ""
  step "清除所有 MyAgent 数据..."
  
  if [ -d "$DATA_DIR" ]; then
    info "数据目录: $DATA_DIR"
    
    # 统计大小
    data_size=$(du -sh "$DATA_DIR" 2>/dev/null | cut -f1)
    info "数据大小: $data_size"
    
    rm -rf "$DATA_DIR"
    success "数据目录已删除: $DATA_DIR ($data_size)"
  else
    info "数据目录不存在: $DATA_DIR"
  fi
  
  # 清理可能的日志文件
  for log_file in \
    "$HOME/.myagent.log" \
    "$HOME/myagent.log" \
    "/tmp/myagent-"*; do
    if [ -e "$log_file" ]; then
      rm -f "$log_file"
      info "已删除日志: $log_file"
    done
  2>/dev/null || true
  
  success "所有数据已清除"
else
  echo ""
  info "保留数据和虚拟环境: $DATA_DIR"
  info "如需彻底清除，请使用: curl -fsSL $SCRIPT_URL | bash -s -- --purge"
  info "或手动删除: rm -rf $DATA_DIR"
fi

echo ""
echo -e "  ${BOLD}${SUCCESS}卸载完成！${NC}"
echo ""
info "如需重新安装: npm install -g $PKG_NAME"
info "或使用一键安装: curl -fsSL https://raw.githubusercontent.com/ctz168/myagent/main/install/install.sh | bash"
echo ""
