"""
Kiểm thử Giao diện Overlay HUD tích hợp (GUI Integration Test)
"""

import os
import sys

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8")

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

from src.assistant_tool.gold_tracker import GoldTracker
from src.assistant_tool.log_watcher import LogWatcher
from src.assistant_tool.market_advisor import MarketAdvisor
from src.assistant_tool.overlay_gui import OverlayHUD


def test_overlay_gui_lifecycle():
    print("[GUI Test] Khởi tạo hệ thống...")
    gt = GoldTracker(50000)
    lw = LogWatcher("dummy_log.txt")
    ma = MarketAdvisor(gt)

    app = OverlayHUD(gold_tracker=gt, log_watcher=lw, market_advisor=ma)
    app.update()

    # 1. Kiểm tra Opacity
    app._on_opacity_change(0.50)
    app.update()
    print("[GUI Test] Opacity slider test: PASSED (Set 50%)")

    # 2. Kiểm tra Vàng & Tính thuế
    gt.add_gold(50000)
    app.update()
    assert gt.current_gold == 100000
    print("[GUI Test] Gold balance sync test: PASSED (100,000 Gold)")

    # 3. Kiểm tra Bắn sự kiện giả lập
    lw.simulate_event(
        event_type="WHISPER_TRADE",
        sender="Tester_Exile",
        message="Hi, I want to buy your 6-Link Ice Nova for 2.6 Divine"
    )
    app.update()
    print("[GUI Test] Simulated trade event test: PASSED")

    # 4. Kiểm tra làm mới danh sách Arbitrage
    app.refresh_arbitrage_list()
    app.update()
    print("[GUI Test] Arbitrage list render: PASSED")

    # 5. Kiểm tra Telemetry Panel & Live HP updates
    from src.assistant_tool.core_shm_bridge import CoreTelemetrySnapshot, PlayerTelemetry
    mock_snap = CoreTelemetrySnapshot(
        is_online=True,
        player=PlayerTelemetry(current_hp=26, max_hp=42, hp_percentage=61.9),
        area_name="The Riverbank",
        area_level=1
    )
    app._on_telemetry_update(mock_snap)
    app.update()
    assert "26 / 42" in app.hp_label.cget("text")
    assert "The Riverbank" in app.area_badge.cget("text")
    print("[GUI Test] Telemetry panel & HP sync: PASSED (26/42 HP, The Riverbank)")

    # 6. Kiểm tra Low HP Alert
    app._on_low_hp_alert(10, 42, 23.8)
    app.update()
    print("[GUI Test] Low HP Alert trigger: PASSED")

    # Đóng cửa sổ an toàn
    app.destroy()
    print("[GUI Test] Cửa sổ đóng an toàn: HOÀN TẤT THÀNH CÔNG!")

if __name__ == "__main__":
    test_overlay_gui_lifecycle()
