"""
AutoPOE2 - Sư đoàn 5: Live Ops World Map & Atlas Verification (Non-Hijacking)
Sử dụng PostMessageW để tương tác nền tuyệt đối an toàn, bảo vệ desktop người dùng (Rule 7 & 8).
"""

import ctypes
import os
import sys
import time
from pathlib import Path

try:
    if hasattr(sys.stdout, "reconfigure"):
        sys.stdout.reconfigure(encoding="utf-8")
        sys.stderr.reconfigure(encoding="utf-8")
except Exception:
    pass

WORKSPACE_ROOT = str(Path(__file__).resolve().parent.parent)
sys.path.insert(0, WORKSPACE_ROOT)

from src.assistant_tool.screen_capturer import ScreenCapturer
from src.common.win32_process import is_poe2_running, get_poe2_pid
from src.common.win32_window import find_poe2_window, get_client_rect
from src.common.win32_input import (
    post_message_key,
    post_message_click,
    post_message_hover,
    VK_U,
    VK_SPACE,
    VK_ESCAPE,
)

def run_live_ops_verification():
    print("[LiveOps] === BẮT ĐẦU KIỂM CHỨNG THỰC ĐỊA SƯ ĐOÀN 5 ===", flush=True)
    
    # 1. Kiểm tra tiến trình POE2
    if not is_poe2_running():
        print("[LiveOps Error] POE2 không chạy!", flush=True)
        return False
        
    pid = get_poe2_pid()
    hwnd = find_poe2_window()
    rect = get_client_rect(hwnd)
    print(f"[LiveOps] Client Target: PID={pid} | HWND=0x{hwnd:X} | Rect={rect}", flush=True)
    
    output_dir = os.path.join(WORKSPACE_ROOT, "captures", "live_ops")
    os.makedirs(output_dir, exist_ok=True)
    capturer = ScreenCapturer(output_dir=output_dir)
    
    # 2. Mở World Map với PostMessageW phím U (0x55)
    print("[LiveOps] Step 3: Gửi PostMessageW phím U (0x55) để mở World Map...", flush=True)
    post_message_key(hwnd, VK_U, dwell_ms=0.08, delay_after=1.5)
    
    p3 = capturer.capture_screenshot(
        event_name="STEP3_WORLD_MAP_REOPENED",
        capture_ram=False,
        auto_focus=False,
        background_mode=True,
    )
    print(f"[LiveOps] Step 3 Capture: {p3}", flush=True)
    
    # 3. Click tab ENDGAME tại tọa độ client (776, 57) qua PostMessageW (Zero desktop interference)
    print("[LiveOps] Step 4: Gửi post_message_click vào tab ENDGAME tại (776, 57)...", flush=True)
    post_message_click(hwnd, 776, 57, button="left", hold_ms=0.06, delay_after=2.5)
    
    p4 = capturer.capture_screenshot(
        event_name="STEP4_ENDGAME_TAB_CLICKED",
        capture_ram=False,
        auto_focus=False,
        background_mode=True,
    )
    print(f"[LiveOps] Step 4 Capture: {p4}", flush=True)
    
    # 4. Kiểm tra và tương tác với Atlas Node trên màn hình ENDGAME
    # Click vùng trung tâm bản đồ Atlas để kích hoạt / chọn Node
    # Tọa độ trung tâm client: (598, 448)
    print("[LiveOps] Step 5: Thăm dò Node Atlas tại trung tâm (598, 448)...", flush=True)
    post_message_click(hwnd, 598, 448, button="left", hold_ms=0.06, delay_after=1.5)
    
    p5 = capturer.capture_screenshot(
        event_name="STEP5_ATLAS_NODE_INSPECTED",
        capture_ram=False,
        auto_focus=False,
        background_mode=True,
    )
    print(f"[LiveOps] Step 5 Capture: {p5}", flush=True)
    
    # 5. Đóng modal World Map an toàn bằng PostMessage phím Spacebar để đưa Monk CI về Idle
    print("[LiveOps] Step 6: Đóng World Map bằng phím Spacebar (0x20) để bảo vệ nhân vật...", flush=True)
    post_message_key(hwnd, VK_SPACE, dwell_ms=0.08, delay_after=1.0)
    
    p6 = capturer.capture_screenshot(
        event_name="STEP6_SAFE_HIDEOUT_STANDBY",
        capture_ram=False,
        auto_focus=False,
        background_mode=True,
    )
    print(f"[LiveOps] Step 6 Safe Standby Capture: {p6}", flush=True)
    
    print("[LiveOps] ✅ Hoàn tất chu kỳ kiểm chứng thực địa không cướp chuột / phím!", flush=True)
    return True

if __name__ == "__main__":
    run_live_ops_verification()
