#!/bin/bash
# ==============================================================================
# Script Name: restore-english.sh
# Description: Revert System Locale to English (en_US.UTF-8)
# Supported  : Ubuntu (Debian Family) / CentOS & Rocky (RHEL Family) / Kylin
# Author     : Gemini (Based on your setup-chinese.sh)
# ==============================================================================

# --- Global Config & Colors ---
readonly LC_TARGET="en_US.UTF-8"
readonly FONT_CONF="/etc/fonts/local.conf"
readonly FONT_CONF_MARKER="Generated by FastOne Chinese Locale scripts"
readonly COLOR_RESET='\033[0m'
readonly COLOR_INFO='\033[0;36m'    # Cyan
readonly COLOR_SUCCESS='\033[0;32m' # Green
readonly COLOR_WARN='\033[1;33m'    # Yellow
readonly COLOR_ERR='\033[0;31m'     # Red

# --- Logging Functions ---
log_info() {
    echo -e "$(date +'%Y-%m-%d %H:%M:%S') ${COLOR_INFO}[INFO]${COLOR_RESET} $1"
}

log_success() {
    echo -e "$(date +'%Y-%m-%d %H:%M:%S') ${COLOR_SUCCESS}[OK]${COLOR_RESET}   $1"
}

log_warn() {
    echo -e "$(date +'%Y-%m-%d %H:%M:%S') ${COLOR_WARN}[WARN]${COLOR_RESET} $1"
}

log_error() {
    echo -e "$(date +'%Y-%m-%d %H:%M:%S') ${COLOR_ERR}[ERR]${COLOR_RESET}  $1" >&2
}

# --- Privilege Check ---
check_privileges() {
    if [ "$EUID" -ne 0 ]; then
        log_warn "Current user is not root. Attempting to auto-elevate with sudo..."
        if command -v sudo >/dev/null 2>&1; then
            exec sudo bash "$0" "$@"
        else
            log_error "This script must be run as root and 'sudo' is not available."
            exit 1
        fi
    fi
}

is_kylin() {
    [ -f /etc/kylin-release ]
}

# --- OS Detection ---
detect_os() {
    if is_kylin; then
        CURRENT_OS="kylin"
    elif [ -f /etc/os-release ]; then
        . /etc/os-release
        CURRENT_OS=$ID
    elif [ -f /etc/redhat-release ]; then
        CURRENT_OS="centos"
    else
        CURRENT_OS="unknown"
    fi
    log_info "Detected Operating System: ${CURRENT_OS}"
}

# --- Task: Revert Ubuntu/Debian ---
task_revert_ubuntu() {
    log_info "Restoring English locale for Ubuntu/Debian..."
    export DEBIAN_FRONTEND=noninteractive

    # Ensure English language packs are present
    apt-get update -qq >/dev/null 2>&1
    apt-get install -y language-pack-en language-pack-en-base >/dev/null 2>&1

    log_info "Generating en_US.UTF-8 locale..."
    locale-gen ${LC_TARGET} >/dev/null 2>&1

    # Update system default via native tool
    update-locale LANG=${LC_TARGET} LC_ALL="" LANGUAGE="" >/dev/null 2>&1
    log_success "Ubuntu locale reset to ${LC_TARGET}."
}

# --- Task: Revert CentOS/RHEL ---
task_revert_centos() {
    log_info "Restoring English locale for RHEL/CentOS family..."

    # Ensure English packs are installed (mostly default, but to be safe)
    if command -v dnf >/dev/null 2>&1; then
        dnf install -y langpacks-en >/dev/null 2>&1
    else
        yum install -y glibc-common >/dev/null 2>&1
    fi

    # Force build English locale
    localedef -v -c -i en_US -f UTF-8 ${LC_TARGET} >/dev/null 2>&1
    log_success "CentOS locale reset to ${LC_TARGET}."
}

# --- Task: Clean Configuration Files (Universal) ---
task_clean_config() {
    log_info "Cleaning up configuration files..."

    # 1. Clean /etc/environment
    # Logic: Remove lines created by the Chinese script
    sed -i '/^LANG=/d' /etc/environment
    sed -i '/^LC_ALL=/d' /etc/environment
    sed -i '/^LANGUAGE=/d' /etc/environment

    # Restore basic LANG
    echo "LANG=\"${LC_TARGET}\"" >> /etc/environment
    log_success "Restored /etc/environment (Removed LC_ALL/LANGUAGE overrides)"

    # 2. Remove the profile script created by setup-chinese.sh
    local PROFILE_SCRIPT="/etc/profile.d/z-locale-settings.sh"
    if [ -f "${PROFILE_SCRIPT}" ]; then
        rm -f "${PROFILE_SCRIPT}"
        log_success "Removed ${PROFILE_SCRIPT}"
    else
        log_info "${PROFILE_SCRIPT} not found, skipping."
    fi

    if [ -f "${FONT_CONF}" ] && grep -q "${FONT_CONF_MARKER}" "${FONT_CONF}"; then
        rm -f "${FONT_CONF}"
        log_success "Removed ${FONT_CONF}"
    fi

    # 3. Fix RHEL specific files
    if [ -f /etc/locale.conf ]; then
        # Overwrite with simple English config
        echo "LANG=\"${LC_TARGET}\"" > /etc/locale.conf
        log_success "Reset /etc/locale.conf"
    elif [ -f /etc/sysconfig/i18n ]; then
        sed -i '/^LANG=/d' /etc/sysconfig/i18n
        echo "LANG=\"${LC_TARGET}\"" >> /etc/sysconfig/i18n
        log_success "Reset /etc/sysconfig/i18n"
    fi
}

# --- Main Logic ---
main() {
    echo "========================================================"
    echo "   System Locale Rollback Tool (en_US.UTF-8)   "
    echo "========================================================"

    check_privileges
    detect_os

    case "$CURRENT_OS" in
        ubuntu|debian|linuxmint)
            task_revert_ubuntu
            ;;
        kylin)
            task_revert_centos
            ;;
        centos|rhel|rocky|almalinux|fedora)
            task_revert_centos
            ;;
        *)
            log_warn "Unknown OS ID: ${CURRENT_OS}. Trying heuristic..."
            if command -v apt-get >/dev/null 2>&1; then
                task_revert_ubuntu
            elif command -v yum >/dev/null 2>&1; then
                task_revert_centos
            fi
            ;;
    esac

    task_clean_config

    echo "========================================================"
    log_success "Rollback completed successfully."
    log_info "System is now configured for English (${LC_TARGET})."
    log_info "Please reboot to apply changes fully: sudo reboot"
    echo "========================================================"
}

main
