"""
Poe2VisualTool Main Launcher & Entrypoint
Kiểm tra đặc quyền UAC (Administrator), tự khởi động Poe2VisualTool.exe và giao diện điều khiển visual_gui.py.
Bối cảnh: 13/09/2026 (Rule 2)
"""

from __future__ import annotations

import ctypes
import os
import subprocess
import sys
from pathlib import Path

# Đảm bảo thư mục gốc nằm trong sys.path
ROOT_DIR = Path(__file__).resolve().parent
if str(ROOT_DIR) not in sys.path:
    sys.path.insert(0, str(ROOT_DIR))


def is_admin() -> bool:
    """Kiểm tra xem tiến trình hiện tại có quyền Administrator không."""
    if os.name != "nt":
        return True
    try:
        return ctypes.windll.shell32.IsUserAnAdmin() != 0
    except Exception:
        return False


def request_elevation() -> bool:
    """Yêu cầu nâng quyền UAC thông qua ShellExecuteW 'runas'."""
    if os.name != "nt":
        return True
    try:
        script = str(Path(__file__).resolve())
        params = f'"{script}" ' + " ".join(f'"{arg}"' for arg in sys.argv[1:])
        ret = ctypes.windll.shell32.ShellExecuteW(
            None,
            "runas",
            sys.executable,
            params,
            str(ROOT_DIR),
            1,  # SW_SHOWNORMAL
        )
        # ShellExecute trả về giá trị > 32 nếu thành công
        return ret > 32
    except Exception:
        return False


def main():
    if hasattr(sys.stdout, "reconfigure"):
        sys.stdout.reconfigure(encoding="utf-8", errors="replace")
    if hasattr(sys.stderr, "reconfigure"):
        sys.stderr.reconfigure(encoding="utf-8", errors="replace")

    print("=" * 60)
    print("  Poe2VisualTool — Companion & Visual Engine Launcher")
    print("  Bản quyền 2026 · Hỗ trợ Path of Exile 2 (v0.5.5+)")
    print("=" * 60)

    # 1. Kiểm tra UAC
    if not is_admin():
        print("[!] Đang yêu cầu quyền Administrator (UAC) để đọc bộ nhớ game...")
        if request_elevation():
            print("[+] Đã chuyển tiếp sang tiến trình Administrator.")
            sys.exit(0)
        else:
            print("[⚠️ CẢNH BÁO] Không thể nâng quyền Administrator. Một số tính năng đọc RAM có thể bị hạn chế.")

    # 2. Khởi chạy giao diện điều khiển Visual GUI
    print("[*] Đang khởi động giao diện điều khiển Visual GUI...")
    try:
        from src.assistant.visual_gui import VisualGuiApp
        app = VisualGuiApp(start_engine=True)
        app.mainloop()
    except Exception as exc:
        print(f"[!] Lỗi khi chạy giao diện điều khiển: {exc}")
        sys.exit(1)


if __name__ == "__main__":
    main()
