#!/bin/bash

# 定义颜色常量
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
RESET='\033[0m'

# 定义日志函数
log() {
    local level=$1
    local msg=$2
    case $level in
        INFO)    echo -e "[`date +'%Y-%m-%d %H:%M:%S'`] ${BLUE}[INFO]${RESET} $msg" ;;
        SUCCESS) echo -e "[`date +'%Y-%m-%d %H:%M:%S'`] ${GREEN}[SUCCESS]${RESET} $msg" ;;
        ERROR)   echo -e "[`date +'%Y-%m-%d %H:%M:%S'`] ${RED}[ERROR]${RESET} $msg" ;;
        WARNING) echo -e "[`date +'%Y-%m-%d %H:%M:%S'`] ${YELLOW}[WARNING]${RESET} $msg" ;;
    esac
}

# 检测系统类型
DETECTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release | tr -d '"')

# 定义不同系统的相关参数
case $DETECTION in
    centos|rhel|rocky|almalinux)
        PACKAGE_MANAGER="yum"
        REDIS_PACKAGES=("redis" "redis-tools")
        ;;
    ubuntu|debian)
        PACKAGE_MANAGER="apt-get"
        REDIS_PACKAGES=("redis-server" "redis-tools")
        ;;
    *)
        log ERROR "不支持的操作系统: $DETECTION"
        exit 1
        ;;
esac

# 停止 Redis 服务
stop_redis() {
    log INFO "停止 Redis 服务"
    if systemctl stop redis &> /dev/null; then
        log SUCCESS "Redis 服务已停止"
    else
        log WARNING "Redis 服务未运行或停止失败（可能无此服务）"
    fi
}

# 禁用 Redis 开机启动
disable_redis() {
    log INFO "禁用 Redis 开机启动"
    if systemctl disable redis &> /dev/null; then
        log SUCCESS "Redis 开机启动已禁用"
    else
        log WARNING "禁用开机启动失败（可能无此服务）"
    fi
}

# 卸载 Redis 包
uninstall_package() {
    log INFO "开始卸载 Redis 相关包"
    case $PACKAGE_MANAGER in
        yum)
            if $PACKAGE_MANAGER remove "${REDIS_PACKAGES[@]}" -y &> /dev/null; then
                log SUCCESS "Redis 包卸载完成"
            else
                log ERROR "Redis 包卸载失败"
                exit 1
            fi
            ;;
        apt-get)
            if apt-get purge "${REDIS_PACKAGES[@]}" -y &> /dev/null; then
                log SUCCESS "Redis 包彻底卸载完成"
            else
                log ERROR "Redis 包卸载失败"
                exit 1
            fi
            ;;
    esac
}

# 删除配置文件和数据目录
remove_config() {
    local config_files=("/etc/redis.conf" "/etc/redis" "/etc/systemd/system/redis.service")
    local data_dirs=("/var/lib/redis" "/var/log/redis" "/var/run/redis")

    log INFO "删除 Redis 配置文件"
    for file in "${config_files[@]}"; do
        if [ -e "$file" ]; then
            log INFO "删除 $file"
            rm -rf "$file"
            log SUCCESS "$file 删除成功"
        else
            log WARNING "$file 不存在，跳过"
        fi
    done

    log INFO "删除 Redis 数据和日志目录"
    for dir in "${data_dirs[@]}"; do
        if [ -d "$dir" ]; then
            log INFO "删除 $dir"
            rm -rf "$dir"
            log SUCCESS "$dir 删除成功"
        else
            log WARNING "$dir 不存在，跳过"
        fi
    done
}

# 清理残留用户和组
clean_residue() {
    log INFO "清理 Redis 残留用户和组"
    if getent passwd redis &> /dev/null; then
        userdel -r redis
        log SUCCESS "用户 'redis' 及其家目录已删除"
    else
        log WARNING "用户 'redis' 不存在，跳过"
    fi

    if getent group redis &> /dev/null; then
        groupdel redis
        log SUCCESS "组 'redis' 已删除"
    else
        log WARNING "组 'redis' 不存在，跳过"
    fi
}

# ---------------------------
# 主执行流程
# ---------------------------
log INFO "开始 Redis 彻底卸载流程"

# 停止并禁用服务
stop_redis
disable_redis

# 卸载软件包
uninstall_package

# 删除配置和数据
remove_config

# 清理残留用户和组
clean_residue

# 检查服务状态
log INFO "最终服务状态检查"
systemctl status redis --no-pager | grep -E 'Active|Loaded' || true

log SUCCESS "Redis 已彻底卸载"
echo -e "\n${GREEN}✨ 卸载完成 ✨${RESET}"
echo "  - 已卸载 Redis 软件包"
echo "  - 已删除配置文件和数据目录"
echo "  - 已清理残留用户/组（如有）"
echo "  - 服务状态：$(systemctl is-active redis)"