import time
import sys
import math
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
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from src.assistant_tool.screen_capturer import ScreenCapturer
from src.common.win32_window import find_poe2_window, ensure_window_focus
from src.common.win32_input import send_wasd_direction, dismiss_modals
from src.assistant_tool.core_shm_bridge import CoreShmBridge

capturer = ScreenCapturer(output_dir="captures")
hwnd = find_poe2_window()
if not hwnd:
    print("Could not find POE2 window")
    sys.exit(1)

ensure_window_focus(hwnd, timeout_ms=1000)
time.sleep(0.3)

bridge = CoreShmBridge()
snap_before = bridge.read_telemetry_snapshot()
pos_before = (snap_before.player.pos_x, snap_before.player.pos_y) if snap_before and snap_before.player else (0.0, 0.0)
print(f"[WalkTest] Tọa độ trước khi bước: ({pos_before[0]:.2f}, {pos_before[1]:.2f})")

dismiss_modals(1, delay_after=0.2)

# Nhịp 1: Giữ phím W (Bắc) 1.5s
print("[WalkTest] Bắt đầu gửi WASD hướng Bắc (W) 1.5s...")
ok1 = send_wasd_direction(1.0, 1.0, dwell_ms=1.5, hwnd=hwnd)
print(f"[WalkTest] Trạng thái nhịp 1: {ok1}")
time.sleep(0.3)

# Nhịp 2: Giữ phím A (Tây) 1.2s
print("[WalkTest] Bắt đầu gửi WASD hướng Tây (A) 1.2s...")
ok2 = send_wasd_direction(-1.0, 1.0, dwell_ms=1.2, hwnd=hwnd)
print(f"[WalkTest] Trạng thái nhịp 2: {ok2}")
time.sleep(0.5)

snap_after = bridge.read_telemetry_snapshot()
pos_after = (snap_after.player.pos_x, snap_after.player.pos_y) if snap_after and snap_after.player else (0.0, 0.0)
dx = pos_after[0] - pos_before[0]
dy = pos_after[1] - pos_before[1]
delta = math.sqrt(dx * dx + dy * dy)
print(f"[WalkTest] Tọa độ sau khi bước: ({pos_after[0]:.2f}, {pos_after[1]:.2f}) | Delta XYZ = {delta:.2f}u")

img_path = capturer.capture_screenshot(event_name="WALK_TO_MAP_DEVICE_TEST", capture_ram=True)
print(f"[WalkTest] Ảnh chụp bằng chứng: {img_path}")
