import os
import sys
import time
import numpy as np
from PIL import Image

sys.path.insert(0, ".")

from src.assistant_tool.client_launcher import Poe2ClientLauncher
from src.common.win32_window import find_poe2_window, ensure_window_focus, is_poe2_window_focused
import src.common.win32_input as win32_input
from src.common.screen_capture import capture_window_bitblt
import scripts.reconnect_and_enter_hideout as reconnect_module

def test():
    print("=== KIỂM TRA THỰC ĐỊA BƠM PHÍM WASD TRÊN CLIENT POE2 ===")
    hwnd = find_poe2_window()
    if not hwnd:
        Poe2ClientLauncher.launch_client(wait_timeout_sec=90)
        for _ in range(90):
            hwnd = find_poe2_window()
            if hwnd:
                break
            time.sleep(1.0)

    rc = reconnect_module.main(hwnd=hwnd)
    print(f"Reconnect status: {rc.get('success')}")

    ensure_window_focus(hwnd)
    time.sleep(1.0)
    focused = is_poe2_window_focused(hwnd)
    print(f"Game HWND: 0x{hwnd:X}, Focused: {focused}")

    # Chụp ảnh trước di chuyển
    img1 = capture_window_bitblt(hwnd, client_only=True)
    if img1:
        img1.save("captures/test_wasd_before.png")

    print("Thực hiện bơm phím W (send_wasd_direction screen_y > threshold) trong 1.5s...")
    # dx=1.0, dy=1.0 -> screen_x=0, screen_y=1.414 -> Phím W
    res = win32_input.send_wasd_direction(1.0, 1.0, dwell_ms=1.5, hwnd=hwnd)
    print(f"Kết quả send_wasd_direction: {res}")
    time.sleep(0.5)

    # Chụp ảnh sau di chuyển
    img2 = capture_window_bitblt(hwnd, client_only=True)
    if img2:
        img2.save("captures/test_wasd_after.png")

    if img1 and img2:
        diff = np.abs(np.array(img1).astype(float) - np.array(img2).astype(float)).mean()
        print(f"Pixel difference sau khi bơm phím W 1.5s: {diff:.2f}")
        if diff > 10.0:
            print("🎉 THÀNH CÔNG: Nhân vật ĐÃ DI CHUYỂN RÕ RỆT (Diff > 10px)!")
        else:
            print("⚠️ CẢNH BÁO: Nhân vật KHÔNG DI CHUYỂN (Diff <= 10px)!")

if __name__ == "__main__":
    test()
