import time
import ctypes
import struct

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

def read_xyz():
    pid = 43084
    h = kernel32.OpenProcess(0x0010, False, pid)
    if not h: return None
    buf = ctypes.create_string_buffer(12)
    br = ctypes.c_size_t()
    kernel32.ReadProcessMemory(h, ctypes.c_void_p(0x2AF791A0550), buf, 12, ctypes.byref(br))
    kernel32.CloseHandle(h)
    return struct.unpack("<fff", buf.raw)

def main():
    hwnd = user32.FindWindowW("POEWindowClass", None)
    if not hwnd: hwnd = user32.FindWindowW(None, "Path of Exile 2")
    user32.ShowWindow(hwnd, 9)
    user32.SetForegroundWindow(hwnd)
    user32.BringWindowToTop(hwnd)
    time.sleep(0.3)

    # Click on Quest Tracker area (2200, 450) to give true focus without triggering skill
    user32.SetCursorPos(2200, 450)
    time.sleep(0.05)
    user32.mouse_event(0x0002, 0, 0, 0, 0)
    time.sleep(0.05)
    user32.mouse_event(0x0004, 0, 0, 0, 0)
    time.sleep(0.3)

    xyz0 = read_xyz()
    print(f"XYZ Before Spacebar: {xyz0}")

    # Aim towards North-East (1800, 600)
    user32.SetCursorPos(1800, 600)
    time.sleep(0.05)

    # Press Spacebar (VK 0x20, scan 0x39)
    print("Pressing Spacebar (Dodge Roll)...")
    user32.keybd_event(0x20, 0x39, 0, 0)
    time.sleep(0.05)
    user32.keybd_event(0x20, 0x39, 2, 0)

    # Wait for dodge roll animation (~600ms)
    time.sleep(0.8)

    xyz1 = read_xyz()
    print(f"XYZ After Spacebar: {xyz1}")
    dx = xyz1[0] - xyz0[0]
    dy = xyz1[1] - xyz0[1]
    print(f"Delta: dX={dx:.2f}, dY={dy:.2f}")

    import sys
    sys.path.insert(0, r"C:\Projects\AutoPOE2")
    from tools.autonomous_map_runner import ScreenCapturerGDI
    c = ScreenCapturerGDI()
    c.capture(r"C:\Projects\AutoPOE2\captures\test_spacebar_result.png")
    print("Captured test_spacebar_result.png")

if __name__ == '__main__':
    main()
