#!/bin/bash

# Node Exporter 卸载脚本
# 版本: 1.0
# 作者: AIOps Team
# 日期: $(date +%Y-%m-%d)

set -e

# 颜色定义
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"
}

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

# 停止运行中的进程
stop_processes() {
    log_info "停止 Node Exporter 进程..."
    
    local pid_file="/var/run/node-exporter.pid"
    local stopped=false
    
    # 首先尝试通过 PID 文件停止服务
    if [[ -f "$pid_file" ]]; then
        local pid=$(cat "$pid_file")
        if kill -0 "$pid" 2>/dev/null; then
            log_info "通过 PID 文件停止服务 (PID: $pid)..."
            kill "$pid"
            sleep 3
            
            # 检查进程是否已停止
            if kill -0 "$pid" 2>/dev/null; then
                log_warning "进程未响应，强制终止..."
                kill -9 "$pid" 2>/dev/null || true
            fi
            log_success "Node Exporter 进程已停止"
            stopped=true
        else
            log_warning "PID 文件存在但进程已不存在，清理 PID 文件"
            rm -f "$pid_file"
        fi
    fi
    
    # 查找并杀死所有 node_exporter 和 node-exporter 进程
    local pids=$(pgrep -f "node_exporter\|node-exporter" 2>/dev/null || true)
    if [[ -n "$pids" ]]; then
        log_info "发现 node_exporter 或 node-exporter 进程，正在停止..."
        for pid in $pids; do
            log_info "停止进程 PID: $pid"
            kill "$pid" 2>/dev/null || true
        done
        sleep 2
        
        # 检查是否还有进程在运行，如果有则强制终止
        local remaining_pids=$(pgrep -f "node_exporter\|node-exporter" 2>/dev/null || true)
        if [[ -n "$remaining_pids" ]]; then
            log_warning "进程未响应，强制终止..."
            for pid in $remaining_pids; do
                log_info "强制终止进程 PID: $pid"
                kill -9 "$pid" 2>/dev/null || true
            done
            sleep 1
        fi
        
        # 最终检查
        if pgrep -f "node_exporter\|node-exporter" > /dev/null; then
            log_error "无法停止所有 node_exporter 进程"
        else
            log_success "所有 Node Exporter 进程已停止"
            stopped=true
        fi
    else
        log_info "Node Exporter 进程未运行"
    fi
    
    # 清理 PID 文件
    rm -f "$pid_file"
    
    if [[ "$stopped" == "false" ]]; then
        log_warning "未发现需要停止的 Node Exporter 进程"
    fi
}

# 删除二进制文件
remove_binary() {
    log_info "删除 Node Exporter 二进制文件..."
    
    local binary_files=(
        "/usr/local/bin/node-exporter"
        "/usr/local/bin/node_exporter"
    )
    
    local deleted=false
    for binary_file in "${binary_files[@]}"; do
        if [[ -f "$binary_file" ]]; then
            rm -f "$binary_file"
            log_success "二进制文件已删除: $binary_file"
            deleted=true
        fi
    done
    
    if [[ "$deleted" == "false" ]]; then
        log_info "二进制文件不存在"
    fi
}

# 删除配置文件
remove_config() {
    log_info "删除配置文件..."
    
    local config_dir="/etc/node_exporter"
    
    if [[ -d "$config_dir" ]]; then
        rm -rf "$config_dir"
        log_success "配置目录已删除"
    else
        log_info "配置目录不存在"
    fi
}

# 删除数据目录
remove_data_dir() {
    log_info "删除数据目录..."
    
    local data_dir="/var/lib/node_exporter"
    
    if [[ -d "$data_dir" ]]; then
        rm -rf "$data_dir"
        log_success "数据目录已删除"
    else
        log_info "数据目录不存在"
    fi
}

# 检查用户状态（可选）
check_user_status() {
    log_info "检查 node_exporter 用户状态..."
    
    if id "node_exporter" &>/dev/null; then
        log_info "检测到 node_exporter 用户存在"
        log_warning "node_exporter 是系统用户，可能被其他服务使用"
        log_info "为了系统稳定性，将保留 node_exporter 用户"
        log_info "如需手动删除，请运行: sudo userdel node_exporter"
    else
        log_info "node_exporter 用户不存在"
    fi
}

# 清理日志文件
cleanup_logs() {
    log_info "清理日志文件..."
    
    # 清理 journal 日志
    journalctl --vacuum-time=1s --quiet || true
    
    # 删除安装脚本创建的日志文件
    rm -f /var/log/node-exporter.log
    
    log_success "日志文件已清理"
}

# 显示卸载信息
show_uninstall_info() {
    log_success "Node Exporter 卸载完成！"
    echo
    echo "已删除的内容:"
    echo "  - 二进制文件: /usr/local/bin/node-exporter"
    echo "  - 配置目录: /etc/node_exporter"
    echo "  - 数据目录: /var/lib/node_exporter"
    echo "  - 相关日志文件"
    echo
    echo "注意:"
    echo "  - node_exporter 用户已保留（系统用户，可能被其他服务使用）"
    echo "  - 如需完全清理，请手动检查并删除相关文件"
    echo
}

# 主函数
main() {
    echo "=========================================="
    echo "    Node Exporter 卸载脚本 v1.0"
    echo "=========================================="
    echo
    
    check_root
    
    log_warning "此操作将完全卸载 Node Exporter"
    read -p "确认继续？(y/N): " confirm
    
    if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
        log_info "取消卸载操作"
        exit 0
    fi
    
    log_info "开始卸载 Node Exporter..."
    
    stop_processes
    remove_binary
    remove_config
    remove_data_dir
    cleanup_logs
    
    # 检查用户状态
    check_user_status
    
    show_uninstall_info
}

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