import os
import sys
import time
import ctypes
from ctypes import wintypes
import numpy as np

sys.path.insert(0, r"c:\Projects\AutoPOE2")

from src.common.win32_window import attach_to_default_desktop, find_poe2_window
from src.common.virtual_display_manager import capture_virtual_display

user32 = ctypes.windll.user32
kernel32 = ctypes.windll.kernel32

attach_to_default_desktop()
hwnd = find_poe2_window()
print(f"Testing on Default Desktop, PoE2 HWND: {hex(hwnd)}")

VK_W = 0x57
SC_W = 0x11
WM_KEYDOWN = 0x0100
WM_KEYUP = 0x0101
lparam_down = (SC_W << 16) | 1
lparam_up = (SC_W << 16) | 0xC0000001

# Capture before
img1 = capture_virtual_display()
img1.save("captures/test_default_w_before.png")

print("Sending W key via PostMessage on Default Desktop for 1.5s...")
t_end = time.time() + 1.5
while time.time() < t_end:
    user32.PostMessageW(hwnd, WM_KEYDOWN, VK_W, lparam_down)
    time.sleep(0.04)
user32.PostMessageW(hwnd, WM_KEYUP, VK_W, lparam_up)
time.sleep(0.3)

# Capture after
img2 = capture_virtual_display()
img2.save("captures/test_default_w_after.png")

a1 = np.array(img1, dtype=np.float32)
a2 = np.array(img2, dtype=np.float32)
diff = np.abs(a2 - a1)
mean_diff = np.mean(diff)
player_diff = np.mean(diff[440:640, 860:1060])
print(f"Mean Diff: {mean_diff:.4f}, Player Diff: {player_diff:.4f}")
if player_diff > 10.0 or mean_diff > 5.0:
    print(">>> SUCCESS! CHARACTER MOVED ON DEFAULT DESKTOP! <<<")
else:
    print(f"Difference level: {mean_diff:.2f} (baseline idle ~2.0)")
