#!/bin/bash

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

# 日志函数
log() {
    local level=$1
    local msg=$2
    case $level in
        INFO)    echo -e "${BLUE}[INFO]${RESET} $msg" ;;
        SUCCESS) echo -e "${GREEN}[SUCCESS]${RESET} $msg" ;;
        ERROR)   echo -e "${RED}[ERROR]${RESET} $msg" ;;
        WARNING) echo -e "${YELLOW}[WARNING]${RESET} $msg" ;;
    esac
}

# 定义 MySQL 配置文件路径，适用于 CentOS 系统
MYSQL_CONFIG="/etc/my.cnf"
# 定义 MySQL 用户名
MYSQL_USER="root"
# 从 .bashrc 文件中获取 MySQL root 用户的密码
source ~/.bashrc
MYSQL_PASSWORD="$MYSQL_ROOT_PASS"

# 检查密码是否获取成功
if [ -z "$MYSQL_PASSWORD" ]; then
    log ERROR "无法从环境变量中获取 MySQL root 用户的密码，请检查 ~/.bashrc 文件。"
    exit 1
fi

# 修改 MySQL 配置文件以允许所有 IP 连接
if [ -f "$MYSQL_CONFIG" ]; then
    sudo sed -i 's/bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/' "$MYSQL_CONFIG"
    log INFO "MySQL 配置文件已修改，允许所有 IP 连接。"
else
    log ERROR "未找到 MySQL 配置文件: $MYSQL_CONFIG"
    exit 1
fi

# 重启 MySQL 服务
if sudo systemctl restart mysqld; then
    log INFO "MySQL 服务已成功重启。"
else
    log ERROR "重启 MySQL 服务失败，请检查 MySQL 服务状态。"
    exit 1
fi

# 使用更可靠的方式创建/配置用户
if mysql -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" <<EOF
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED WITH mysql_native_password BY '$MYSQL_PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
then
    log INFO "root 用户远程权限配置成功。"
else
    log ERROR "用户权限配置失败，请检查以下可能原因："
    log ERROR "1. 已存在不同认证方式的 'root'@'%' 用户"
    log ERROR "2. MySQL 版本兼容性问题（建议尝试手动执行）"
    log ERROR "3. 密码策略限制（长度/复杂度要求）"
    exit 1
fi

# 配置防火墙以允许 MySQL 端口（默认为 3306）的流量
if command -v iptables &> /dev/null; then
    if sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT; then
        log INFO "防火墙（iptables）已配置，允许 MySQL 端口 3306 的流量。"
    else
        log ERROR "配置 iptables 防火墙规则失败，请检查防火墙状态。"
    fi
elif command -v firewall-cmd &> /dev/null; then
    if sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent && sudo firewall-cmd --reload; then
        log INFO "防火墙（firewalld）已配置，允许 MySQL 端口 3306 的流量。"
    else
        log ERROR "配置 firewalld 防火墙规则失败，请检查防火墙状态。"
    fi
else
    log WARNING "未检测到支持的防火墙管理工具，无法自动配置防火墙。请手动配置。"
fi

log SUCCESS "MySQL 已成功配置为允许 root 用户远程连接。"
    