#!/usr/bin/env bash

# 定义颜色常量（不退出版本）
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
RESET='\033[0m'

# 配置参数（根据需求修改密码）
REDIS_PASSWORD="chanjian8888"  # 与 Django 配置一致的密码
REDIS_CONF="/etc/redis.conf"
BACKUP_CONF="${REDIS_CONF}.bak"
BASHRC_FILE="$HOME/.bashrc"

log() {
    local level=$1
    local msg=$2
    local timestamp=$(date +"[%Y-%m-%d %H:%M:%S]")
    case $level in
        INFO)    echo -e "${timestamp} [${BLUE}INFO${RESET}] ${msg}"; ;;
        SUCCESS) echo -e "${timestamp} [${GREEN}SUCCESS${RESET}] ${msg}"; ;;
        ERROR)   echo -e "${timestamp} [${RED}ERROR${RESET}] ${msg}"; ;;  # 移除 exit 1，仅提示错误
    esac
}

install_redis() {
    log INFO "开始安装 redis"
    yum install -y redis
    if [ $? -ne 0 ]; then
        log ERROR "redis 安装失败"
    else
        log SUCCESS "redis 安装成功"
    fi
}

install_vim() {
    log INFO "开始安装 vim"
    yum install -y vim
    if [ $? -ne 0 ]; then
        log ERROR "vim 安装失败"
    else
        log SUCCESS "vim 安装成功"
    fi
}

configure_redis() {
    log INFO "开始配置 redis 密码"
    
    # 备份原始配置（强制覆盖，使用绝对路径）
    /bin/cp -f "$REDIS_CONF" "$BACKUP_CONF"
    log SUCCESS "配置文件已备份（强制覆盖旧备份）"
    
    # 转义密码中的特殊字符（如 ! 需加反斜杠）
    ESCAPED_PASSWORD=$(echo "$REDIS_PASSWORD" | sed 's/[&\/]/\\&/g')
    
    # 优先替换已有的 requirepass 行（支持带注释和空格的情况）
    sed -i "s/^[# ]*requirepass.*/requirepass ${ESCAPED_PASSWORD}/" "$REDIS_CONF"
    
    # 若未找到匹配行则追加（处理全新安装）
    if ! grep -q "^requirepass" "$REDIS_CONF"; then
        echo -e "\nrequirepass ${ESCAPED_PASSWORD}" >> "$REDIS_CONF"
    fi
    
    # 检查密码是否配置成功
    if grep -q "requirepass ${ESCAPED_PASSWORD}" "$REDIS_CONF"; then
        log SUCCESS "密码配置成功"
    else
        log ERROR "密码配置失败，请手动检查 ${REDIS_CONF}（常见原因：密码包含特殊字符未转义）"
    fi
}

update_bashrc() {
    log INFO "开始更新 .bashrc 文件中的 REDIS_PASSWORD"
    # 删除已有的 REDIS_PASSWORD 行
    sed -i '/^export REDIS_PASSWORD=/d' "$BASHRC_FILE"
    # 写入新的 REDIS_PASSWORD
    echo "export REDIS_PASSWORD=\"$REDIS_PASSWORD\"" >> "$BASHRC_FILE"
    log SUCCESS "已更新 .bashrc 文件中的 REDIS_PASSWORD"
}

start_redis() {
    log INFO "启动 Redis 服务"
    systemctl start redis
    if [ $? -ne 0 ]; then
        log ERROR "Redis 服务启动失败"
    else
        log SUCCESS "Redis 服务启动成功"
    fi
}

enable_redis() {
    log INFO "设置开机自启"
    systemctl enable redis
    if [ $? -ne 0 ]; then
        log ERROR "开机自启设置失败"
    else
        log SUCCESS "Redis 已设置开机自启"
    fi
}

check_status() {
    log INFO "Redis 服务状态："
    systemctl status redis --no-pager
}

summarize() {
    echo -e "\n${GREEN}✨ 配置总结 ✨${RESET}"
    echo "  - 绑定 IP: 127.0.0.1"
    echo "  - 访问密码: ${REDIS_PASSWORD}"
    echo "  - 服务状态: $(systemctl is-active redis)"
    echo "  - 开机自启: $(systemctl is-enabled redis)"
    echo "  - 配置文件: ${REDIS_CONF}"
    echo "  - .bashrc 中的 REDIS_PASSWORD 已更新"
}

main() {
    install_redis
    install_vim
    configure_redis
    update_bashrc
    start_redis
    enable_redis
    check_status
    summarize
}

main    