#!/bin/bash

set -e

# 加载配置文件（仅在解压后的目录中可用）
load_config() {
    # setup.sh 脚本不需要配置文件，FTP参数通过命令行参数或环境变量提供
    log_info "setup.sh 脚本使用命令行参数或环境变量获取FTP配置"
}

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

FTP_SERVER="${FTP_SERVER}"
FTP_USER="${FTP_USER}"
FTP_PASS="${FTP_PASS}"
FTP_PORT="${FTP_PORT:-21}"
BASE_URL=""                                  # FTP基础URL (将在check_ftp_params中设置)
LATEST_VERSION_URL=""                        # 版本文件URL (将在check_ftp_params中设置)
TEMP_DIR="/tmp/argus-metric-install-$$"

# 安装目录配置
DEFAULT_INSTALL_DIR="/opt/argus-metric"      # 默认安装目录
INSTALL_DIR="${INSTALL_DIR:-$DEFAULT_INSTALL_DIR}"  # 可通过环境变量覆盖
VERSIONS_DIR="$INSTALL_DIR/versions"         # 版本目录
BACKUPS_DIR="$INSTALL_DIR/backups"           # 备份目录
CURRENT_LINK="$INSTALL_DIR/current"          # 当前版本软链接
LATEST_VERSION_FILE="$INSTALL_DIR/LATEST_VERSION"  # 当前版本记录文件

# 检查必需的FTP参数
check_ftp_params() {
    local missing_params=()
    
    if [[ -z "$FTP_SERVER" ]]; then
        missing_params+=("FTP_SERVER")
    fi
    
    if [[ -z "$FTP_USER" ]]; then
        missing_params+=("FTP_USER")
    fi
    
    if [[ -z "$FTP_PASS" ]]; then
        missing_params+=("FTP_PASS")
    fi
    
    if [[ ${#missing_params[@]} -gt 0 ]]; then
        log_error "缺少必需的FTP参数: ${missing_params[*]}"
        log_error "请通过以下方式之一设置FTP参数:"
        log_error "  1. 命令行参数: --server <地址> --user <用户名> --password <密码>"
        log_error "  2. 环境变量: FTP_SERVER=<地址> FTP_USER=<用户名> FTP_PASS=<密码>"
        log_error ""
        log_error "示例:"
        log_error "  sudo sh setup.sh --server 10.211.55.4 --user ftpuser --password admin1234"
        log_error "  FTP_SERVER=10.211.55.4 FTP_USER=ftpuser FTP_PASS=admin1234 sudo sh setup.sh"
        exit 1
    fi
    
    # 设置BASE_URL和LATEST_VERSION_URL
    BASE_URL="ftp://${FTP_SERVER}:${FTP_PORT}"
    LATEST_VERSION_URL="$BASE_URL/LATEST_VERSION"
    
    log_info "FTP配置:"
    log_info "  服务器: $FTP_SERVER:$FTP_PORT"
    log_info "  用户: $FTP_USER"
}

# 获取最新版本号的函数
get_latest_version() {
    log_info "获取最新版本信息..." >&2
    log_info "尝试从URL获取: $LATEST_VERSION_URL" >&2
    
    # 先测试FTP连接
    log_info "测试FTP连接..." >&2
    if ! curl -u "${FTP_USER}:${FTP_PASS}" -sfI "$LATEST_VERSION_URL" >/dev/null 2>&1; then
        log_error "无法连接到FTP服务器或文件不存在" >&2
        log_error "URL: $LATEST_VERSION_URL" >&2
        log_error "请检查:" >&2
        log_error "  1. FTP服务器是否运行: $FTP_SERVER:$FTP_PORT" >&2
        log_error "  2. 用户名密码是否正确: $FTP_USER" >&2
        log_error "  3. LATEST_VERSION文件是否存在" >&2
        log_error "手动测试命令: curl -u ${FTP_USER}:${FTP_PASS} ftp://${FTP_SERVER}/LATEST_VERSION" >&2
        exit 1
    fi
    
    # 获取文件内容
    if ! LATEST_VERSION=$(curl -u "${FTP_USER}:${FTP_PASS}" -sfL "$LATEST_VERSION_URL" 2>/dev/null | tr -d '[:space:]'); then
        log_error "下载LATEST_VERSION文件失败" >&2
        exit 1
    fi
    
    log_info "原始获取内容: '$LATEST_VERSION'" >&2
    
    if [[ -z "$LATEST_VERSION" ]]; then
        log_error "获取到的版本信息为空" >&2
        log_error "可能的原因:" >&2
        log_error "  1. LATEST_VERSION文件为空" >&2
        log_error "  2. 文件内容格式不正确" >&2
        log_error "  3. 网络传输问题" >&2
        log_error "请检查FTP服务器上的 /srv/ftp/share/LATEST_VERSION 文件" >&2
        exit 1
    fi
    
    log_info "检测到最新版本: $LATEST_VERSION" >&2
    echo "$LATEST_VERSION"
}

# 解析参数
ARGUS_VERSION=""  # 使用不同的变量名避免与系统VERSION冲突
ACTION="install"
FORCE_INSTALL=false

while [[ $# -gt 0 ]]; do
    case $1 in
        --version)
            ARGUS_VERSION="$2"
            shift 2
            ;;
        --server)
            FTP_SERVER="$2"
            shift 2
            ;;
        --user)
            FTP_USER="$2"
            shift 2
            ;;
        --password)
            FTP_PASS="$2"
            shift 2
            ;;
        --port)
            FTP_PORT="$2"
            shift 2
            ;;
        --uninstall)
            ACTION="uninstall"
            shift
            ;;
        --install-dir)
            INSTALL_DIR="$2"
            shift 2
            ;;
        # 简化安装逻辑：不再支持回滚和备份列表功能
        # --rollback)
        #     ACTION="rollback"
        #     shift
        #     ;;
        # --backup-list)
        #     ACTION="backup-list"
        #     shift
        #     ;;
        --status)
            ACTION="status"
            shift
            ;;
        --force)
            FORCE_INSTALL=true
            shift
            ;;
        --help)
            echo "Argus Metric FTP在线安装脚本"
            echo
            echo "用法: curl -u <用户名>:<密码> ftp://<服务器>/setup.sh -o setup.sh && sh setup.sh [选项]"
            echo
            echo "必需参数 (必须通过命令行参数或环境变量设置):"
            echo "  --server SERVER       FTP服务器地址 (必须)"
            echo "  --user USER           FTP用户名 (必须)"
            echo "  --password PASS       FTP密码 (必须)"
            echo
            echo "可选参数:"
            echo "  --version VERSION     指定版本 (默认: 自动获取最新版本)"
            echo "  --port PORT           FTP端口 (默认: 21)"
            echo "  --install-dir DIR     安装目录 (默认: /opt/argus-metric)"
            echo "  --force               强制重新安装 (即使相同版本)"
            echo "  --uninstall           卸载 (自动确认)"
            # echo "  --rollback            回滚到上一个备份版本"
            # echo "  --backup-list         列出所有备份版本"
            echo "  --status              显示当前安装状态"
            echo "  --help                显示帮助"
            echo
            echo "环境变量:"
            echo "  FTP_SERVER            FTP服务器地址 (必须)"
            echo "  FTP_USER              FTP用户名 (必须)"
            echo "  FTP_PASS              FTP密码 (必须)"
            echo "  FTP_PORT              FTP端口 (默认: 21)"
            echo
            echo "示例:"
            echo "  # 方式1: 使用命令行参数"
            echo "  curl -u ftpuser:admin1234 ftp://10.211.55.4/setup.sh -o setup.sh"
            echo "  sudo sh setup.sh --server 10.211.55.4 --user ftpuser --password admin1234"
            echo "  "
            echo "  # 方式2: 使用环境变量"
            echo "  FTP_SERVER=10.211.55.4 FTP_USER=ftpuser FTP_PASS=admin1234 sudo sh setup.sh"
            echo "  "
            echo "  # 指定版本安装"
            echo "  sudo sh setup.sh --server 10.211.55.4 --user ftpuser --password admin1234 --version 1.30.0"
            echo "  "
            echo "  # 强制重新安装"
            echo "  sudo sh setup.sh --server 10.211.55.4 --user ftpuser --password admin1234 --force"
            echo "  "
            echo "  # 卸载"
            echo "  sudo sh setup.sh --server 10.211.55.4 --user ftpuser --password admin1234 --uninstall"
            exit 0
            ;;
        *)
            log_error "未知参数: $1"
            echo "使用 --help 查看帮助信息"
            exit 1
            ;;
    esac
done

# 清理函数
cleanup() {
    if [[ -d "$TEMP_DIR" ]]; then
        rm -rf "$TEMP_DIR"
    fi
}

trap cleanup EXIT

# 创建安装目录结构
create_install_directories() {
    log_info "创建安装目录结构..."
    
    # 创建主要目录
    mkdir -p "$VERSIONS_DIR"
    mkdir -p "$BACKUPS_DIR"
    
    log_success "安装目录结构创建完成: $INSTALL_DIR"
}

# 获取当前安装的版本
get_current_version() {
    # 优先从LATEST_VERSION文件读取
    if [[ -f "$LATEST_VERSION_FILE" ]]; then
        local version_from_file=$(cat "$LATEST_VERSION_FILE" 2>/dev/null | tr -d '[:space:]')
        if [[ -n "$version_from_file" ]]; then
            # 确保版本号格式一致（不带v前缀）
            echo "$version_from_file"
            return 0
        fi
    fi
    
    # 如果文件不存在或为空，从软链接读取
    if [[ -L "$CURRENT_LINK" ]]; then
        local current_path=$(readlink "$CURRENT_LINK")
        # 从版本目录名中提取版本号（现在不带v前缀）
        basename "$current_path"
    else
        echo ""
    fi
}

# 检查是否已安装
check_installed() {
    if [[ -L "$CURRENT_LINK" ]] && [[ -d "$CURRENT_LINK" ]]; then
        local current_version=$(get_current_version)
        if [[ -n "$current_version" ]]; then
            log_info "检测到已安装版本: v$current_version"
            return 0
        fi
    fi
    return 1
}

# 更新LATEST_VERSION文件
update_latest_version_file() {
    local version="$1"
    log_info "更新LATEST_VERSION文件: $version"
    
    if echo "$version" > "$LATEST_VERSION_FILE"; then
        log_success "LATEST_VERSION文件已更新"
    else
        log_error "更新LATEST_VERSION文件失败"
        return 1
    fi
}

# 初始化 DNS 配置文件到系统目录
init_dns_config_to_system() {
    log_info "初始化 DNS 配置文件到系统目录..."
    
    # 系统 DNS 配置文件
    local system_dns_conf="$INSTALL_DIR/dns.conf"
    
    # 如果系统目录中还没有 dns.conf，创建一个空的占位文件
    if [[ ! -f "$system_dns_conf" ]]; then
        touch "$system_dns_conf"
        chmod 644 "$system_dns_conf"
        log_success "DNS 配置文件占位文件已创建: $system_dns_conf"
        log_info "DNS 同步脚本将从 FTP 服务器下载实际的 DNS 配置"
    else
        log_info "DNS 配置文件已存在: $system_dns_conf"
    fi
}

# 备份当前版本
backup_current_version() {
    local current_version=$(get_current_version)
    if [[ -z "$current_version" ]]; then
        log_info "没有当前版本需要备份"
        return 0
    fi
    
    # 确保备份目录存在
    mkdir -p "$BACKUPS_DIR"
    
    local backup_name="$current_version"
    local backup_path="$BACKUPS_DIR/$backup_name"
    
    log_info "备份当前版本 $current_version 到: $backup_path"
    
    # 如果备份已存在，先删除
    if [[ -d "$backup_path" ]]; then
        log_info "备份版本已存在，覆盖: $backup_path"
        rm -rf "$backup_path"
    fi
    
    # 复制当前版本目录（跟随软链接复制实际内容）
    if cp -rL "$CURRENT_LINK" "$backup_path"; then
        log_success "版本备份完成: $backup_name"

    else
        log_error "版本备份失败"
        exit 1
    fi
}

# 回滚到备份版本
rollback_to_backup() {
    local backup_name="$1"
    
    # 确保备份目录存在
    mkdir -p "$BACKUPS_DIR"
    
    local backup_path="$BACKUPS_DIR/$backup_name"
    
    if [[ ! -d "$backup_path" ]]; then
        log_error "备份不存在: $backup_path"
        return 1
    fi
    
    log_info "回滚到备份版本: $backup_name"
    
    # 停止当前服务
    stop_services
    
    # 检查是否存在对应的版本目录
    local version_dir="$VERSIONS_DIR/$backup_name"
    
    if [[ ! -d "$version_dir" ]]; then
        log_info "版本目录不存在，从备份恢复版本目录: $version_dir"
        # 从备份目录恢复到版本目录
        mkdir -p "$VERSIONS_DIR"
        cp -r "$backup_path" "$version_dir"
    fi
    
    # 恢复软链接指向版本目录
    if ln -sfn "$version_dir" "$CURRENT_LINK"; then
        log_success "版本回滚完成: $backup_name"
        
        # 更新LATEST_VERSION文件
        update_latest_version_file "$backup_name"
        
        return 0
    else
        log_error "版本回滚失败"
        return 1
    fi
}

# 停止服务
stop_services() {
    log_info "停止当前服务..."
    
    # 检查服务是否正在运行
    if ! check_services_running; then
        log_info "服务未运行，无需停止"
        return 0
    fi
    
    # 尝试使用卸载脚本停止服务
    if [[ -f "$CURRENT_LINK/uninstall.sh" ]]; then
        cd "$CURRENT_LINK"
        chmod +x uninstall.sh
        
        # 自动确认停止服务（避免交互式确认）
        echo "y" | ./uninstall.sh >/dev/null 2>&1
        local stop_exit_code=$?
        
        if [[ $stop_exit_code -eq 0 ]]; then
            log_success "服务停止完成"
        else
            log_warning "停止服务时出现警告，尝试手动停止"
            manual_stop_services
        fi
    else
        log_warning "未找到卸载脚本，尝试手动停止服务"
        manual_stop_services
    fi
}

# 手动停止服务
manual_stop_services() {
    log_info "手动停止服务..."
    
    # 停止 node_exporter
    if pgrep -f "node_exporter" >/dev/null 2>&1; then
        pkill -f "node_exporter" && log_info "node_exporter 已停止"
    fi
    
    # 停止 dcgm_exporter
    if pgrep -f "dcgm_exporter" >/dev/null 2>&1; then
        pkill -f "dcgm_exporter" && log_info "dcgm_exporter 已停止"
    fi
    
    # 等待进程完全停止
    sleep 2
    
    # 检查是否还有残留进程
    if pgrep -f "node_exporter\|dcgm_exporter" >/dev/null 2>&1; then
        log_warning "仍有服务进程运行，尝试强制停止"
        pkill -9 -f "node_exporter\|dcgm_exporter" 2>/dev/null || true
    fi
    
    log_success "手动停止服务完成"
}

# 启动服务
start_services() {
    log_info "启动服务..."
    
    # 检查服务是否已经在运行
    if check_services_running; then
        log_info "服务已在运行，跳过启动"
        return 0
    fi
    
    # 由于 install_artifact.sh 已经安装了所有组件并设置了健康检查定时任务
    # 这里只需要简单验证服务状态即可
    log_info "组件已安装完成，健康检查定时任务已设置"
    log_info "服务将在健康检查时自动启动（每5分钟检查一次）"
    
    # 等待一下让服务有时间启动
    sleep 3
    
    # 验证服务状态
    if check_services_running; then
        log_success "服务启动成功"
    else
        log_info "服务可能正在启动中，健康检查机制将自动监控"
    fi
    
    return 0
}

# 检查服务是否正在运行
check_services_running() {
    # 检查常见的服务端口是否在监听
    local ports=(9100 9400)  # node-exporter 和 dcgm-exporter 的默认端口
    
    for port in "${ports[@]}"; do
        if netstat -tlnp 2>/dev/null | grep -q ":$port "; then
            log_info "检测到服务正在端口 $port 上运行"
            return 0
        fi
    done
    
    # 检查相关进程
    if pgrep -f "node_exporter\|dcgm_exporter" >/dev/null 2>&1; then
        log_info "检测到相关服务进程正在运行"
        return 0
    fi
    
    return 1
}

# 检查是否为 root 用户
check_root() {
    if [[ $EUID -ne 0 ]]; then
        log_error "此脚本需要 root 权限运行"
        log_info "请使用: sudo sh setup.sh"
        exit 1
    fi
}

# 检查系统要求
check_system() {
    log_info "检查系统要求..."
    
    # 检查操作系统
    if [[ ! -f /etc/os-release ]]; then
        log_error "无法检测操作系统版本"
        exit 1
    fi
    
    # 读取系统信息，使用子shell避免污染当前环境变量
    local OS_INFO=$(source /etc/os-release && echo "$NAME $VERSION_ID")
    log_info "检测到操作系统: $OS_INFO"
    
    # 检查系统架构
    arch=$(uname -m)
    log_info "系统架构: $arch"
    
    # 检查磁盘空间
    available_space=$(df / | awk 'NR==2 {print $4}')
    if [[ $available_space -lt 1024 ]]; then
        log_warning "可用磁盘空间不足 1GB，当前可用: $(($available_space / 1024 / 1024))GB"
    fi
}

# 下载并安装
install_argus_metric() {
    # 如果没有指定版本，获取最新版本
    if [[ -z "$ARGUS_VERSION" ]]; then
        ARGUS_VERSION=$(get_latest_version)
    fi
    
    log_info "开始安装 Argus Metric v$ARGUS_VERSION..."
    log_info "安装目录: $INSTALL_DIR"
    
    # 创建安装目录结构（必须先创建，以便备份时目录存在）
    create_install_directories
    
    # 检查是否已安装
    local is_upgrade=false
    if check_installed; then
        local current_version=$(get_current_version)
        if [[ "$current_version" == "$ARGUS_VERSION" ]]; then
            if [[ "$FORCE_INSTALL" == true ]]; then
                log_info "检测到相同版本 v$ARGUS_VERSION，但使用了 --force 参数，将强制重新安装"
                is_upgrade=true
                # 简化安装逻辑：不再备份当前版本
                # backup_current_version
            else
                log_info "版本 v$ARGUS_VERSION 已安装，无需重复安装"
                log_info "如需强制重新安装，请使用 --force 参数"
                return 0
            fi
        else
            log_info "检测到版本升级: v$current_version -> v$ARGUS_VERSION"
            is_upgrade=true
            
            # 简化安装逻辑：不再备份当前版本
            # backup_current_version
        fi
    fi
    
    # 创建临时目录
    mkdir -p "$TEMP_DIR"
    cd "$TEMP_DIR"
    
    # 下载发布包，使用新的命名规范
    TAR_NAME="argus-metric_$(echo $ARGUS_VERSION | tr '.' '_').tar.gz"
    log_info "下载发布包: $TAR_NAME"
    log_info "从FTP服务器下载: $FTP_SERVER:$FTP_PORT, 用户: $FTP_USER"
    
    # 构造curl命令并显示（隐藏密码）
    CURL_CMD="curl -u \"${FTP_USER}:***\" -sfL \"$BASE_URL/$TAR_NAME\" -o \"$TAR_NAME\""
    log_info "执行命令: $CURL_CMD"
    
    if ! curl -u "${FTP_USER}:${FTP_PASS}" -sfL "$BASE_URL/$TAR_NAME" -o "$TAR_NAME"; then
        log_error "下载发布包失败: $BASE_URL/$TAR_NAME"
        log_error "完整命令: curl -u \"${FTP_USER}:${FTP_PASS}\" -sfL \"$BASE_URL/$TAR_NAME\" -o \"$TAR_NAME\""
        log_error "请检查FTP服务器连接、用户名密码是否正确"
        exit 1
    fi
    
    # 解压发布包到当前目录
    log_info "解压发布包..."
    if ! tar -xzf "$TAR_NAME"; then
        log_error "解压发布包失败"
        exit 1
    fi
    
    # 显示解压后的文件结构
    log_info "解压后的文件结构:"
    ls -la "$TEMP_DIR"
    
    # 准备版本目录
    local version_dir="$VERSIONS_DIR/$ARGUS_VERSION"
    log_info "安装到版本目录: $version_dir"
    
    # 如果升级，先停止服务
    if [[ "$is_upgrade" == true ]]; then
        stop_services
    fi
    
    # 创建版本目录
    if [[ -d "$version_dir" ]]; then
        log_info "版本目录已存在，备份后更新"
        rm -rf "$version_dir"
    fi
    
    # 创建新的版本目录
    mkdir -p "$version_dir"
    
    # 移动解压的文件到版本目录
    log_info "移动文件到版本目录: $TEMP_DIR/* -> $version_dir/"
    
    # 检查源目录是否有内容
    if [[ ! "$(ls -A "$TEMP_DIR" 2>/dev/null)" ]]; then
        log_error "临时目录为空，无法移动文件"
        exit 1
    fi
    
    # 检查目标目录是否存在
    if [[ ! -d "$version_dir" ]]; then
        log_error "目标版本目录不存在: $version_dir"
        exit 1
    fi
    
    # 执行文件移动
    if mv "$TEMP_DIR"/* "$version_dir" 2>/dev/null; then
        log_success "文件移动到版本目录完成"
    else
        log_error "移动文件到版本目录失败"
        log_error "源目录内容:"
        ls -la "$TEMP_DIR" || true
        log_error "目标目录状态:"
        ls -la "$version_dir" || true
        log_error "权限检查:"
        ls -ld "$TEMP_DIR" "$version_dir" || true
        exit 1
    fi
    
    # 执行安装脚本
    log_info "执行安装脚本..."
    cd "$version_dir"
    if [[ -f "install.sh" ]]; then
        chmod +x install.sh
        # 传递安装根目录给安装脚本，让install_artifact.sh安装到正确的版本目录
        if ./install.sh "$version_dir"; then
            log_success "安装脚本执行完成"
        else
            log_error "安装脚本执行失败"
            # 简化安装逻辑：不再自动回滚
            # if [[ "$is_upgrade" == true ]]; then
            #     log_warning "升级失败，尝试回滚到之前版本..."
            #     # 确保备份目录存在
            #     mkdir -p "$BACKUPS_DIR"
            #     local latest_backup=$(ls -1t "$BACKUPS_DIR" 2>/dev/null | head -n 1)
            #     if [[ -n "$latest_backup" ]]; then
            #         rollback_to_backup "$latest_backup"
            #         return 1
            #     fi
            # fi
            exit 1
        fi
    else
        log_error "未找到安装脚本 install.sh"
        exit 1
    fi
    
    # 更新软链接指向新版本
    log_info "更新当前版本链接..."
    
    # 如果 current 已经存在且是目录，先删除它
    if [[ -d "$CURRENT_LINK" ]] && [[ ! -L "$CURRENT_LINK" ]]; then
        log_warning "发现 current 是目录而不是符号链接，正在删除..."
        rm -rf "$CURRENT_LINK"
    fi
    
    if ln -sfn "$version_dir" "$CURRENT_LINK"; then
        log_success "版本链接更新完成: $CURRENT_LINK -> $version_dir"
    else
        log_error "版本链接更新失败"
        exit 1
    fi
    
    # 更新LATEST_VERSION文件
    update_latest_version_file "$ARGUS_VERSION"
    
    # 初始化 DNS 配置文件到系统目录
    init_dns_config_to_system
    
    # 启动服务
    # start_services
    
    log_success "Argus Metric v$ARGUS_VERSION 安装完成！"
    
    # 显示安装信息
    echo
    log_info "安装信息:"
    log_info "  版本: $ARGUS_VERSION"
    log_info "  安装目录: $INSTALL_DIR"
    log_info "  版本目录: $version_dir"
    log_info "  当前链接: $CURRENT_LINK"
    if [[ "$is_upgrade" == true ]]; then
        log_info "  升级类型: 版本升级"
    else
        log_info "  安装类型: 全新安装"
    fi
}

# 卸载
uninstall_argus_metric() {
    log_info "开始卸载 Argus Metric..."
    log_info "安装目录: $INSTALL_DIR"
    
    # 检查是否已安装
    if ! check_installed; then
        log_info "未检测到已安装的 Argus Metric"
        return 0
    fi
    
    local current_version=$(get_current_version)
    log_info "检测到当前版本: v$current_version"
    
    # 停止服务
    stop_services
    
    # 执行卸载脚本
    log_info "执行卸载脚本..."
    if [[ -f "$CURRENT_LINK/uninstall.sh" ]]; then
        cd "$CURRENT_LINK"
        chmod +x uninstall.sh
        
        # 自动确认卸载（因为用户已经明确使用了 --uninstall 参数）
        log_info "自动确认卸载操作..."
        echo "y" | ./uninstall.sh
        local uninstall_exit_code=$?
        
        if [[ $uninstall_exit_code -eq 0 ]]; then
            log_success "卸载脚本执行完成"
        else
            log_error "卸载脚本执行失败 (退出码: $uninstall_exit_code)"
            exit 1
        fi
    else
        log_warning "未找到卸载脚本，执行基本清理"
    fi
    
    # 清理安装目录
    log_info "清理安装目录..."
    if [[ -d "$INSTALL_DIR" ]]; then
        # 询问是否完全删除安装目录
        log_warning "这将删除整个安装目录: $INSTALL_DIR"
        log_warning "包括所有版本、备份和配置文件"
        
        # 在自动化环境中，直接删除
        if rm -rf "$INSTALL_DIR"; then
            log_success "安装目录已完全清理: $INSTALL_DIR"
        else
            log_error "清理安装目录失败"
            exit 1
        fi
    else
        log_info "安装目录不存在，无需清理"
    fi
    
    log_success "Argus Metric 卸载完成！"
}

# 显示状态
show_status() {
    echo "=========================================="
    echo "    Argus Metric 安装状态"
    echo "=========================================="
    echo
    
    if check_installed; then
        local current_version=$(get_current_version)
        log_info "当前版本: $current_version"
        log_info "安装目录: $INSTALL_DIR"
        log_info "当前链接: $CURRENT_LINK"
        log_info "版本目录: $VERSIONS_DIR/$current_version"
        log_info "版本文件: $LATEST_VERSION_FILE"
        
        # 显示LATEST_VERSION文件内容
        if [[ -f "$LATEST_VERSION_FILE" ]]; then
            local file_version=$(cat "$LATEST_VERSION_FILE" 2>/dev/null | tr -d '[:space:]')
            log_info "版本文件内容: $file_version"
        fi
        
        echo
        log_info "目录结构:"
        if [[ -d "$INSTALL_DIR" ]]; then
            tree -L 2 "$INSTALL_DIR" 2>/dev/null || ls -la "$INSTALL_DIR"
        fi
        
        echo
        log_info "可用版本:"
        if [[ -d "$VERSIONS_DIR" ]]; then
            ls -1 "$VERSIONS_DIR" 2>/dev/null | sed 's/^/  - /'
        else
            echo "  无"
        fi
        
        # 简化安装逻辑：不再显示备份版本信息
        # echo
        # log_info "备份版本:"
        # if [[ -d "$BACKUPS_DIR" ]] && [[ $(ls -1 "$BACKUPS_DIR" 2>/dev/null | wc -l) -gt 0 ]]; then
        #     ls -1t "$BACKUPS_DIR" 2>/dev/null | sed 's/^/  - /'
        # else
        #     echo "  无"
        # fi
    else
        log_warning "Argus Metric 未安装"
        log_info "安装目录: $INSTALL_DIR"
    fi
}

# 列出备份
list_backups() {
    echo "=========================================="
    echo "    Argus Metric 备份列表"
    echo "=========================================="
    echo
    
    if [[ -d "$BACKUPS_DIR" ]] && [[ $(ls -1 "$BACKUPS_DIR" 2>/dev/null | wc -l) -gt 0 ]]; then
        log_info "可用备份版本:"
        ls -1t "$BACKUPS_DIR" 2>/dev/null | while read backup; do
            local backup_time=$(stat -c %y "$BACKUPS_DIR/$backup" 2>/dev/null | cut -d' ' -f1-2)
            echo "  - $backup (创建时间: $backup_time)"
        done
    else
        log_warning "没有可用的备份版本"
    fi
}

# 回滚功能
rollback_version() {
    log_info "开始回滚操作..."
    
    if ! check_installed; then
        log_error "没有检测到已安装的版本，无法回滚"
        exit 1
    fi
    
    # 确保备份目录存在
    mkdir -p "$BACKUPS_DIR"
    
    # 获取最新的备份
    local latest_backup=$(ls -1t "$BACKUPS_DIR" 2>/dev/null | head -n 1)
    if [[ -z "$latest_backup" ]]; then
        log_error "没有找到可用的备份版本"
        exit 1
    fi
    
    log_info "将回滚到备份版本: $latest_backup"
    
    if rollback_to_backup "$latest_backup"; then
        log_success "回滚完成！"
        
        # 显示当前状态
        echo
        show_status
    else
        log_error "回滚失败"
        exit 1
    fi
}

# 主函数
main() {
    echo "=========================================="
    echo "    Argus Metric 在线安装脚本 v1.0"
    echo "=========================================="
    echo
    
    # 加载配置文件
    load_config
    
    # 对于状态操作，不需要FTP参数和root权限
    # 简化安装逻辑：不再支持备份列表操作
    if [[ "$ACTION" == "status" ]]; then
        show_status
        return 0
    fi
    # if [[ "$ACTION" == "status" || "$ACTION" == "backup-list" ]]; then
    #     if [[ "$ACTION" == "status" ]]; then
    #         show_status
    #     elif [[ "$ACTION" == "backup-list" ]]; then
    #         list_backups
    #     fi
    #     return 0
    # fi
    
    check_root
    
    # 更新目录配置变量（在设置INSTALL_DIR后）
    VERSIONS_DIR="$INSTALL_DIR/versions"
    BACKUPS_DIR="$INSTALL_DIR/backups"
    CURRENT_LINK="$INSTALL_DIR/current"
    LATEST_VERSION_FILE="$INSTALL_DIR/LATEST_VERSION"
    
    # 简化安装逻辑：不再支持回滚操作
    # if [[ "$ACTION" == "rollback" ]]; then
    #     rollback_version
    #     return 0
    # fi
    
    check_ftp_params
    check_system
    
    if [[ "$ACTION" == "uninstall" ]]; then
        uninstall_argus_metric
    else
        install_argus_metric
    fi
    
    echo
    log_info "操作完成！"
}

# 脚本入口
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi
