#!/usr/bin/env bash
# =============================================================================
#  WinBoat Manager for Linux Mint (Ubuntu/Debian based)
#  Version : 1.2  (defensive, không dùng set -e, log đầy đủ stdout/stderr)
# =============================================================================

# KHÔNG dùng set -e nữa — chúng ta kiểm tra exit code thủ công
# để không bị "fail dây chuyền" khi 1 lệnh apt warning.
set -u +e
shopt -s nocasematch 2>/dev/null || true

# ----------------------------- Hằng số ---------------------------------------
WINBOAT_VERSION="0.9.0"
WINBOAT_DEB_URL="https://github.com/TibixDev/winboat/releases/download/v${WINBOAT_VERSION}/winboat-${WINBOAT_VERSION}-amd64.deb"
WINBOAT_APPIMAGE_URL="https://github.com/TibixDev/winboat/releases/download/v${WINBOAT_VERSION}/winboat-${WINBOAT_VERSION}-x86_64.AppImage"
WINBOAT_ICON_URL="https://raw.githubusercontent.com/TibixDev/winboat/main/icons/winboat_logo.svg"

LOG_FILE="/var/log/winboat-manager-$(date +%Y%m%d-%H%M%S).log"
if ! touch "$LOG_FILE" 2>/dev/null; then
    LOG_FILE="/tmp/winboat-manager-$$.log"
    touch "$LOG_FILE"
fi
TMP_DIR="$(mktemp -d -t winboat-XXXXXX)"

REAL_USER="${SUDO_USER:-${USER:-root}}"
REAL_HOME="$(getent passwd "$REAL_USER" 2>/dev/null | cut -d: -f6)"
[ -z "${REAL_HOME:-}" ] && REAL_HOME="$HOME"

# Tìm thư mục Desktop (hỗ trợ đa ngôn ngữ)
DESKTOP_DIR=""
for d in "$REAL_HOME/Desktop" "$REAL_HOME/Máy tính để bàn" "$REAL_HOME/Bàn làm việc"; do
    [ -d "$d" ] && DESKTOP_DIR="$d" && break
done
[ -z "$DESKTOP_DIR" ] && DESKTOP_DIR="$REAL_HOME/Desktop"

# ----------------------------- Màu sắc ---------------------------------------
if [[ -t 1 ]]; then
    RED=$'\033[1;31m'; GREEN=$'\033[1;32m'; YELLOW=$'\033[1;33m'
    BLUE=$'\033[1;34m'; CYAN=$'\033[1;36m'; BOLD=$'\033[1m'; NC=$'\033[0m'
else
    RED=''; GREEN=''; YELLOW=''; BLUE=''; CYAN=''; BOLD=''; NC=''
fi

log()  { printf '%s[%s]%s %s\n' "$CYAN"   "$(date +%H:%M:%S)" "$NC" "$*" | tee -a "$LOG_FILE"; }
ok()   { printf '%s[ OK ]%s %s\n' "$GREEN"  "$NC" "$*" | tee -a "$LOG_FILE"; }
warn() { printf '%s[WARN]%s %s\n' "$YELLOW" "$NC" "$*" | tee -a "$LOG_FILE"; }
err()  { printf '%s[ERR ]%s %s\n' "$RED"    "$NC" "$*" | tee -a "$LOG_FILE"; }
ask()  { printf '%s[ ? ]%s %s\n'  "$BLUE"   "$NC" "$*"; }

cleanup() { rm -rf "$TMP_DIR" 2>/dev/null; }
trap cleanup EXIT

# ----------- Hàm chạy lệnh: GHI TOÀN BỘ stdout+stderr vào log, KHÔNG kill -----
run() {
    log "→ $*"
    local out
    out=$("$@" 2>&1)
    local rc=$?
    [ -n "$out" ] && printf '%s\n' "$out" >> "$LOG_FILE"
    if (( rc != 0 )); then
        warn "Lệnh exit=$rc: $*"
        # Hiện 3 dòng cuối của output để user thấy lỗi ngay
        printf '%s\n' "$out" | tail -3 | sed 's/^/        /'
    fi
    return $rc
}

# Lệnh BẮT BUỘC phải thành công, fail thì exit
run_strict() {
    run "$@"
    local rc=$?
    if (( rc != 0 )); then
        err "Lệnh bắt buộc thất bại: $*"
        err "Xem log: $LOG_FILE"
        exit $rc
    fi
}

# Cài gói an toàn: chỉ cài gói có trong repo, từng cái một
apt_install_safe() {
    local pkg
    for pkg in "$@"; do
        if dpkg -s "$pkg" >/dev/null 2>&1; then
            log "Gói $pkg đã cài, bỏ qua."
            continue
        fi
        if ! apt-cache show "$pkg" >/dev/null 2>&1; then
            warn "Gói '$pkg' không có trong repo, bỏ qua."
            continue
        fi
        if run apt-get install -y --no-install-recommends "$pkg"; then
            ok "Đã cài $pkg"
        else
            warn "Cài $pkg thất bại (xem log)."
        fi
    done
}

# ----------------------------- Kiểm tra môi trường ---------------------------
require_root() {
    if [[ $EUID -ne 0 ]]; then
        err "Vui lòng chạy bằng sudo:  sudo bash $0"
        exit 1
    fi
}

check_distro() {
    if ! command -v apt-get >/dev/null 2>&1; then
        err "Script chỉ hỗ trợ Mint/Ubuntu/Debian."
        exit 1
    fi
    if [[ -r /etc/os-release ]]; then
        # shellcheck disable=SC1091
        . /etc/os-release
        log "Hệ điều hành: ${PRETTY_NAME:-unknown}"
        log "Codename: ${UBUNTU_CODENAME:-${VERSION_CODENAME:-?}}"
    fi
}

check_kvm() {
    log "Kiểm tra ảo hóa..."
    if grep -E -qc '(vmx|svm)' /proc/cpuinfo; then
        ok "CPU hỗ trợ ảo hoá."
    else
        err "CPU không hỗ trợ VT-x/AMD-V hoặc chưa bật BIOS/UEFI."
        exit 1
    fi
    [[ -e /dev/kvm ]] && ok "/dev/kvm tồn tại." || warn "/dev/kvm chưa có, sẽ tạo qua qemu-kvm."
}

check_resources() {
    local ram_gb cpu_threads free_gb
    ram_gb=$(awk '/MemTotal/ {printf "%d", $2/1024/1024}' /proc/meminfo)
    cpu_threads=$(nproc)
    free_gb=$(df -BG --output=avail "$REAL_HOME" 2>/dev/null | tail -1 | tr -dc '0-9')
    [ -z "$free_gb" ] && free_gb=0
    log "RAM: ${ram_gb} GB | CPU: ${cpu_threads} threads | Free \$HOME: ${free_gb} GB"
    (( ram_gb < 4 ))      && warn "Khuyến nghị ≥4 GB RAM."
    (( cpu_threads < 2 )) && warn "Khuyến nghị ≥2 CPU threads."
    (( free_gb  < 32 ))   && warn "Khuyến nghị ≥32 GB trống."
    return 0
}

check_network() {
    log "Kiểm tra mạng..."
    if curl -fsSL --max-time 5 https://github.com >/dev/null 2>&1; then
        ok "Mạng tốt."
    else
        err "Không truy cập được GitHub. Kiểm tra kết nối mạng."
        exit 1
    fi
}

# ----------------------------- APT update bền bỉ ----------------------------
# Linux Mint hay có repo lỗi (mintupdate, ppa cũ); apt-get update có thể trả
# exit code != 0 nhưng vẫn dùng được. Ta KHÔNG fail script vì lý do đó.
apt_update() {
    log "apt-get update (warning có thể bỏ qua)..."
    run apt-get update
    # Bất kể rc, ta tiếp tục — apt-cache vẫn dùng được với index hiện có
    return 0
}

# ----------------------------- Cài FreeRDP ----------------------------------
install_freerdp() {
    log "Cài FreeRDP (cần v3.x.x)..."

    # 1) Ưu tiên freerdp3-x11 (có trong repo Mint 22 / Ubuntu 24.04 universe)
    if apt-cache show freerdp3-x11 >/dev/null 2>&1; then
        if run apt-get install -y freerdp3-x11; then
            ok "Đã cài freerdp3-x11."
            return 0
        fi
    fi

    # 2) Thử PPA remmina-ppa-team (có FreeRDP 3 cho Ubuntu 22.04 cũ hơn)
    warn "Repo không có freerdp3-x11 hoặc cài thất bại."

    # 3) Fallback freerdp2-x11
    if apt-cache show freerdp2-x11 >/dev/null 2>&1; then
        warn "Cài tạm freerdp2-x11 (WinBoat cần v3 — cân nhắc Flatpak)."
        run apt-get install -y freerdp2-x11
    fi

    # 4) Cuối cùng: Flatpak
    if ! command -v xfreerdp3 >/dev/null 2>&1 && ! command -v xfreerdp >/dev/null 2>&1; then
        warn "Cài FreeRDP qua Flatpak..."
        run apt-get install -y flatpak
        run flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
        run flatpak install -y flathub com.freerdp.FreeRDP
    fi
    return 0
}

# ----------------------------- Cài deps chung -------------------------------
install_common_deps() {
    export DEBIAN_FRONTEND=noninteractive
    export NEEDRESTART_MODE=a   # tự khởi động lại service, không hỏi

    apt_update

    log "Cài các gói cơ bản..."
    apt_install_safe ca-certificates curl wget gnupg lsb-release \
        apt-transport-https software-properties-common jq

    log "Cài QEMU/KVM + libvirt..."
    apt_install_safe qemu-kvm qemu-system-x86 libvirt-daemon-system \
        libvirt-clients bridge-utils virt-manager

    log "Cài iptables / nftables..."
    apt_install_safe iptables nftables

    install_freerdp

    log "Load kernel modules..."
    for mod in kvm iptable_nat nf_tables; do
        if modprobe "$mod" 2>>"$LOG_FILE"; then
            ok "Loaded: $mod"
        else
            warn "Không load được $mod (có thể đã built-in)."
        fi
    done
    cat >/etc/modules-load.d/winboat.conf <<EOF
kvm
iptable_nat
nf_tables
EOF
    ok "Đã ghi /etc/modules-load.d/winboat.conf"

    usermod -aG kvm "$REAL_USER"      2>>"$LOG_FILE" || true
    usermod -aG libvirt "$REAL_USER"  2>>"$LOG_FILE" || true

    if command -v xfreerdp3 >/dev/null 2>&1; then
        ok "FreeRDP: $(xfreerdp3 /version 2>/dev/null | head -1)"
    elif command -v xfreerdp >/dev/null 2>&1; then
        warn "Chỉ thấy xfreerdp (v2). WinBoat khuyến nghị v3."
    fi
}

# ----------------------------- Docker ----------------------------------------
install_docker() {
    if command -v docker >/dev/null 2>&1; then
        ok "Docker đã cài: $(docker --version 2>/dev/null)"
    else
        log "Cài Docker Engine từ repo chính thức..."
        # shellcheck disable=SC1091
        . /etc/os-release
        local codename="${UBUNTU_CODENAME:-${VERSION_CODENAME:-jammy}}"
        # Linux Mint có VERSION_CODENAME riêng (xia/wilma/virginia) — map sang Ubuntu
        case "$codename" in
            wilma|virginia|vanessa|vera|victoria) codename="jammy" ;;
            xia|zara) codename="noble" ;;
        esac
        log "Dùng codename Ubuntu: $codename"

        install -m 0755 -d /etc/apt/keyrings
        run rm -f /etc/apt/keyrings/docker.gpg
        if curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
            | gpg --dearmor -o /etc/apt/keyrings/docker.gpg 2>>"$LOG_FILE"; then
            ok "Đã tải GPG key Docker."
        else
            err "Không tải được GPG key Docker."
            return 1
        fi
        chmod a+r /etc/apt/keyrings/docker.gpg

        echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu ${codename} stable" \
            > /etc/apt/sources.list.d/docker.list
        ok "Đã thêm repo Docker."

        apt_update
        run_strict apt-get install -y docker-ce docker-ce-cli containerd.io \
            docker-buildx-plugin docker-compose-plugin
        ok "Đã cài Docker: $(docker --version)"
    fi

    run systemctl enable --now docker
    run usermod -aG docker "$REAL_USER"
    ok "Thêm '$REAL_USER' vào group docker (đăng xuất/reboot để có hiệu lực)."
}

# ----------------------------- Podman ----------------------------------------
install_podman() {
    log "Cài Podman + podman-compose..."
    apt_install_safe podman uidmap slirp4netns fuse-overlayfs catatonit

    if apt-cache show podman-compose >/dev/null 2>&1; then
        run apt-get install -y podman-compose
    else
        warn "Repo không có podman-compose, dùng pip3..."
        apt_install_safe python3-pip python3-venv
        # Ubuntu 24.04 cần --break-system-packages
        if ! sudo -u "$REAL_USER" pip3 install --user --break-system-packages --quiet podman-compose >>"$LOG_FILE" 2>&1; then
            sudo -u "$REAL_USER" pip3 install --user --quiet podman-compose >>"$LOG_FILE" 2>&1 || \
                warn "Cài podman-compose qua pip thất bại."
        fi
    fi

    if command -v podman >/dev/null 2>&1; then
        ok "Podman: $(podman --version)"
    else
        err "Podman chưa cài được."
        return 1
    fi

    # Bật podman.socket cho user — chỉ khi có session graphical
    local uid
    uid="$(id -u "$REAL_USER")"
    if [[ -d "/run/user/$uid" ]]; then
        sudo -u "$REAL_USER" XDG_RUNTIME_DIR="/run/user/$uid" \
            systemctl --user enable --now podman.socket >>"$LOG_FILE" 2>&1 \
            && ok "Đã bật podman.socket --user" \
            || warn "Không bật được podman.socket --user (sẽ tự bật sau khi login)."
    else
        warn "Chưa có /run/user/$uid — bỏ qua bật podman.socket lúc này."
    fi
}

# ----------------------------- Kiểm tra đã cài chưa -------------------------
# Trả về:
#   0 = chưa cài
#   1 = đã cài cùng version (skip)
#   2 = đã cài version khác (reinstall/upgrade)
#   3 = user muốn huỷ
detect_existing_winboat() {
    if ! dpkg -s winboat >/dev/null 2>&1; then
        return 0
    fi

    local installed_ver
    installed_ver=$(dpkg -s winboat 2>/dev/null | awk '/^Version:/ {print $2}')
    log "Phát hiện WinBoat đã cài, version: ${installed_ver}"

    # Phát hiện backend đang dùng
    local backend_info=""
    if command -v docker >/dev/null 2>&1 && systemctl is-active --quiet docker 2>/dev/null; then
        backend_info+="Docker "
    fi
    if command -v podman >/dev/null 2>&1; then
        backend_info+="Podman "
    fi
    [ -n "$backend_info" ] && log "Backend container hiện có: ${backend_info}"

    # Phát hiện VM Windows / dữ liệu hiện có
    local has_data=""
    for d in "${REAL_HOME}/.winboat" "${REAL_HOME}/.config/winboat" "${REAL_HOME}/.local/share/winboat"; do
        if [[ -d "$d" ]]; then
            has_data+="$(basename "$d") "
        fi
    done
    [ -n "$has_data" ] && log "Dữ liệu WinBoat hiện có ở: ${has_data}"

    echo
    printf '%s%s┌─────────────────────────────────────────────────────┐%s\n' "$YELLOW" "$BOLD" "$NC"
    printf '%s%s│   WinBoat ĐÃ ĐƯỢC CÀI ĐẶT trên máy này              │%s\n' "$YELLOW" "$BOLD" "$NC"
    printf '%s%s│   Version: %-41s│%s\n'                                        "$YELLOW" "$BOLD" "$installed_ver" "$NC"
    printf '%s%s└─────────────────────────────────────────────────────┘%s\n' "$YELLOW" "$BOLD" "$NC"
    echo
    echo "Bạn muốn làm gì?"
    echo "  1) Bỏ qua, không làm gì"
    echo "  2) Cài lại WinBoat v${WINBOAT_VERSION} (giữ nguyên dữ liệu Windows VM)"
    echo "  3) Chỉ tạo/sửa lại shortcut trên Desktop"
    echo "  4) Gỡ bỏ hoàn toàn rồi cài lại từ đầu"
    echo "  0) Huỷ"
    echo
    local choice
    read -rp "Lựa chọn của bạn [0-4]: " choice </dev/tty

    case "$choice" in
        1)
            ok "Đã bỏ qua. WinBoat ${installed_ver} vẫn nguyên trạng."
            exit 0
            ;;
        2)
            log "Sẽ cài lại WinBoat v${WINBOAT_VERSION}..."
            if [[ "$installed_ver" == "$WINBOAT_VERSION" ]]; then
                warn "Bạn đang cài lại CÙNG version (${WINBOAT_VERSION})."
            fi
            return 2
            ;;
        3)
            log "Chỉ tạo/sửa shortcut Desktop..."
            create_desktop_shortcut
            ok "Hoàn tất. Không cài lại WinBoat."
            exit 0
            ;;
        4)
            warn "Sẽ gỡ bỏ HOÀN TOÀN rồi cài lại từ đầu."
            uninstall_all
            return 0   # đã sạch, tiếp tục flow cài mới
            ;;
        0|"")
            warn "Đã huỷ."
            exit 0
            ;;
        *)
            err "Lựa chọn không hợp lệ."
            exit 1
            ;;
    esac
}

# ----------------------------- WinBoat .deb ---------------------------------
install_winboat() {
    log "Tải WinBoat v${WINBOAT_VERSION}..."
    local deb="${TMP_DIR}/winboat.deb"
    if ! wget --show-progress -O "$deb" "$WINBOAT_DEB_URL" 2>&1 | tee -a "$LOG_FILE"; then
        err "Tải WinBoat thất bại."
        return 1
    fi

    if [[ ! -s "$deb" ]]; then
        err "File .deb tải về rỗng."
        return 1
    fi

    log "Cài gói .deb..."
    if ! run apt-get install -y "$deb"; then
        warn "apt install thất bại, thử dpkg + fix deps..."
        run dpkg -i "$deb"
        run_strict apt-get install -f -y
    fi

    if dpkg -s winboat >/dev/null 2>&1; then
        ok "WinBoat đã cài: $(dpkg -s winboat | awk '/^Version:/ {print $2}')"
    else
        err "WinBoat chưa cài được. Xem log."
        return 1
    fi
}

# ----------------------------- Desktop shortcut -----------------------------
create_desktop_shortcut() {
    log "Tạo shortcut WinBoat..."
    mkdir -p "$DESKTOP_DIR"

    local icon_path="/usr/share/icons/hicolor/scalable/apps/winboat.svg"
    if [[ ! -f "$icon_path" ]]; then
        mkdir -p "$(dirname "$icon_path")"
        wget -q -O "$icon_path" "$WINBOAT_ICON_URL" 2>>"$LOG_FILE" || warn "Không tải được icon."
    fi

    local sys_desktop="/usr/share/applications/winboat.desktop"
    if [[ ! -f "$sys_desktop" ]]; then
        cat > "$sys_desktop" <<EOF
[Desktop Entry]
Name=WinBoat
Comment=Run Windows apps on Linux
Exec=winboat %U
Icon=winboat
Terminal=false
Type=Application
Categories=System;Utility;Emulator;
StartupNotify=true
StartupWMClass=winboat
EOF
        chmod 644 "$sys_desktop"
    fi

    local user_desktop="${DESKTOP_DIR}/winboat.desktop"
    cp "$sys_desktop" "$user_desktop"
    chmod +x "$user_desktop"
    chown "$REAL_USER:$REAL_USER" "$user_desktop"
    sudo -u "$REAL_USER" gio set "$user_desktop" "metadata::trusted" true 2>/dev/null || true

    update-desktop-database /usr/share/applications 2>/dev/null || true
    ok "Shortcut: $user_desktop"
}

# ----------------------------- Uninstall ------------------------------------
uninstall_all() {
    printf '%s%s=== GỠ BỎ WINBOAT HOÀN TOÀN ===%s\n' "$RED" "$BOLD" "$NC"
    ask "Sẽ xoá: gói WinBoat, container, Windows VM image, shortcut."
    read -rp "Gõ 'YES' để xác nhận: " confirm </dev/tty
    [[ "$confirm" != "YES" ]] && { warn "Đã huỷ."; exit 0; }

    if command -v docker >/dev/null 2>&1; then
        log "Xoá container/volume WinBoat (Docker)..."
        docker ps -a --format '{{.Names}}' 2>/dev/null | grep -Ei 'winboat|windows' | \
            xargs -r docker rm -f >>"$LOG_FILE" 2>&1
        docker volume ls -q 2>/dev/null | grep -Ei 'winboat|windows' | \
            xargs -r docker volume rm -f >>"$LOG_FILE" 2>&1
        docker network ls --format '{{.Name}}' 2>/dev/null | grep -Ei 'winboat' | \
            xargs -r docker network rm >>"$LOG_FILE" 2>&1
    fi
    if command -v podman >/dev/null 2>&1; then
        log "Xoá container/volume WinBoat (Podman)..."
        sudo -u "$REAL_USER" podman ps -a --format '{{.Names}}' 2>/dev/null | \
            grep -Ei 'winboat|windows' | xargs -r -I{} sudo -u "$REAL_USER" podman rm -f {}
        sudo -u "$REAL_USER" podman volume ls -q 2>/dev/null | \
            grep -Ei 'winboat|windows' | xargs -r -I{} sudo -u "$REAL_USER" podman volume rm -f {}
    fi

    if dpkg -l 2>/dev/null | grep -q '^ii  winboat'; then
        run apt-get purge -y winboat
        run apt-get autoremove -y
    fi

    log "Xoá dữ liệu WinBoat..."
    rm -rf \
        "${REAL_HOME}/.winboat" \
        "${REAL_HOME}/.config/winboat" \
        "${REAL_HOME}/.local/share/winboat" \
        "${REAL_HOME}/.cache/winboat" \
        /opt/winboat 2>/dev/null

    rm -f "${DESKTOP_DIR}/winboat.desktop" \
          /usr/share/applications/winboat.desktop \
          /usr/share/icons/hicolor/scalable/apps/winboat.svg \
          /etc/modules-load.d/winboat.conf 2>/dev/null
    update-desktop-database /usr/share/applications 2>/dev/null

    echo
    ask "Gỡ luôn Docker Engine? (y/N)"; read -r r </dev/tty
    if [[ "$r" =~ ^[Yy]$ ]]; then
        systemctl disable --now docker docker.socket containerd 2>/dev/null
        run apt-get purge -y docker-ce docker-ce-cli containerd.io \
            docker-buildx-plugin docker-compose-plugin
        rm -rf /var/lib/docker /var/lib/containerd /etc/docker \
               /etc/apt/sources.list.d/docker.list /etc/apt/keyrings/docker.gpg
        ok "Đã gỡ Docker."
    fi
    ask "Gỡ luôn Podman? (y/N)"; read -r r </dev/tty
    if [[ "$r" =~ ^[Yy]$ ]]; then
        run apt-get purge -y podman podman-compose uidmap slirp4netns fuse-overlayfs
        rm -rf "${REAL_HOME}/.local/share/containers"
        ok "Đã gỡ Podman."
    fi
    ask "Gỡ luôn FreeRDP + qemu-kvm? (y/N)"; read -r r </dev/tty
    if [[ "$r" =~ ^[Yy]$ ]]; then
        run apt-get purge -y freerdp3-x11 freerdp2-x11 qemu-kvm qemu-system-x86 \
            libvirt-daemon-system libvirt-clients bridge-utils virt-manager
        ok "Đã gỡ FreeRDP + qemu-kvm."
    fi

    run apt-get autoremove -y
    ok "WinBoat đã gỡ bỏ hoàn toàn."
}

# ----------------------------- Quy trình cài đặt ----------------------------
install_flow() {
    local backend="$1"
    log "===== BẮT ĐẦU CÀI ĐẶT (backend=$backend) ====="
    log "Log file: $LOG_FILE"

    check_distro

    # Kiểm tra đã cài chưa TRƯỚC KHI làm bất cứ gì nặng nề
    detect_existing_winboat
    local existing_state=$?

    check_kvm
    check_resources
    check_network

    install_common_deps

    case "$backend" in
        docker) install_docker ;;
        podman) install_podman ;;
        *)      err "Backend không hợp lệ: $backend"; exit 1 ;;
    esac

    install_winboat
    create_desktop_shortcut

    echo
    printf '%s%s===================================================%s\n' "$GREEN" "$BOLD" "$NC"
    ok "HOÀN TẤT! WinBoat v${WINBOAT_VERSION} (backend: ${backend^^})"
    printf '%s%s===================================================%s\n' "$GREEN" "$BOLD" "$NC"
    echo
    echo "Bước tiếp theo:"
    printf '  1. %sĐăng xuất và đăng nhập lại%s (hoặc reboot) để group "%s" có hiệu lực.\n' "$YELLOW" "$NC" "$backend"
    echo "  2. Nhấp đôi icon WinBoat trên Desktop, hoặc gõ 'winboat'."
    echo "  3. Lần chạy đầu sẽ tải Windows ISO + setup VM (~15-30 phút)."
    echo
    echo "Log đầy đủ: $LOG_FILE"
}

# ----------------------------- Menu ------------------------------------------
show_menu() {
    clear
    cat <<'BANNER'
 __      __  _      ___                _
 \ \    / / (_)    | _ )  ___   __ _  | |_
  \ \/\/ /  | |    | _ \ / _ \ / _` | |  _|
   \_/\_/   |_|    |___/ \___/ \__,_|  \__|
        WinBoat Manager for Linux Mint
BANNER
    echo
    printf '  1) Cài đặt WinBoat với %sDocker%s   (khuyến nghị)\n' "$BOLD" "$NC"
    printf '  2) Cài đặt WinBoat với %sPodman%s  (rootless)\n'    "$BOLD" "$NC"
    printf '  3) %sGỡ bỏ WinBoat hoàn toàn%s\n'                    "$RED"  "$NC"
    printf '  4) Thoát\n\n'
    read -rp "Lựa chọn của bạn [1-4]: " choice </dev/tty
    case "$choice" in
        1) install_flow docker ;;
        2) install_flow podman ;;
        3) uninstall_all ;;
        4) exit 0 ;;
        *) err "Lựa chọn không hợp lệ"; sleep 1; show_menu ;;
    esac
}

# ----------------------------- Entry point ----------------------------------
main() {
    require_root
    case "${1:-menu}" in
        install-docker) install_flow docker ;;
        install-podman) install_flow podman ;;
        uninstall)      uninstall_all ;;
        menu|"")        show_menu ;;
        -h|--help)
            cat <<EOF
Cách dùng:
    sudo bash $0                  # Menu tương tác
    sudo bash $0 install-docker   # Cài bằng Docker
    sudo bash $0 install-podman   # Cài bằng Podman
    sudo bash $0 uninstall        # Gỡ bỏ hoàn toàn
EOF
            ;;
        *) err "Tham số không hợp lệ: $1 (dùng --help)"; exit 1 ;;
    esac
}

main "$@"
