import ctypes, time
from PIL import ImageGrab
import win32gui

user32 = ctypes.windll.user32
hdesk = user32.OpenInputDesktop(0, False, 0x01FF)
if hdesk: user32.SetThreadDesktop(hdesk)

hwnd = 0x002F0BF4 # PID 32572

def make_lparam(x, y):
    return ((y & 0xFFFF) << 16) | (x & 0xFFFF)

def click(x, y):
    lp = make_lparam(x, y)
    user32.PostMessageW(hwnd, 0x0200, 0, lp)
    time.sleep(0.04)
    user32.PostMessageW(hwnd, 0x0201, 1, lp)
    time.sleep(0.08)
    user32.PostMessageW(hwnd, 0x0202, 0, lp)
    time.sleep(0.05)

def dblclick(x, y):
    lp = make_lparam(x, y)
    user32.PostMessageW(hwnd, 0x0200, 0, lp)
    time.sleep(0.03)
    user32.PostMessageW(hwnd, 0x0201, 1, lp)
    time.sleep(0.05)
    user32.PostMessageW(hwnd, 0x0202, 0, lp)
    time.sleep(0.05)
    user32.PostMessageW(hwnd, 0x0203, 1, lp)
    time.sleep(0.05)
    user32.PostMessageW(hwnd, 0x0202, 0, lp)
    time.sleep(0.05)

def send_key(vk):
    sc = user32.MapVirtualKeyW(vk, 0)
    lp = (sc << 16) | 1
    user32.PostMessageW(hwnd, 0x0100, vk, lp)
    time.sleep(0.04)
    user32.PostMessageW(hwnd, 0x0101, vk, lp | (3 << 30))
    time.sleep(0.04)

def send_char(c):
    lp = (ord(c) << 16) | 1
    user32.PostMessageW(hwnd, 0x0102, ord(c), lp)
    time.sleep(0.05)

user32.SetForegroundWindow(hwnd)
time.sleep(0.2)

# Step 0: Dismiss timeout / 'Quay lại'
print("Step 0: Dismissing 'Quay lai'...")
send_key(0x0D)
time.sleep(1.5)

# Step 1: Select Server "Võ Công Truyền Kỳ" (left) -> "Trọn Vẹn Chữ Tình" (right)
print("Step 1: Selecting Server...")
send_key(0x26) # VK_UP
time.sleep(0.1)
click(208, 199)
time.sleep(0.3)
click(610, 209)
time.sleep(0.2)
dblclick(610, 209)
time.sleep(0.2)
click(260, 503)
time.sleep(1.8)

# Step 2: Fill Username 'nguvansi'
print("Step 2: Filling username 'nguvansi'...")
click(400, 302)
time.sleep(0.1)
send_key(0x23) # VK_END
for _ in range(25): send_key(0x08) # Backspace
send_key(0x24) # VK_HOME
for _ in range(25): send_key(0x2E) # Delete
time.sleep(0.1)
for c in "nguvansi":
    send_char(c)
time.sleep(0.2)

# Step 3: Fill Password 'Ngu123@@'
print("Step 3: Filling password 'Ngu123@@'...")
click(464, 342)
time.sleep(0.1)
send_key(0x23)
for _ in range(25): send_key(0x08)
send_key(0x24)
for _ in range(25): send_key(0x2E)
time.sleep(0.1)
for c in "Ngu123@@":
    send_char(c)
time.sleep(0.3)

rect = win32gui.GetWindowRect(hwnd)
img1 = ImageGrab.grab(bbox=rect, all_screens=True)
img1.save(r"c:\Projects\JX\logs\p32572_credentials_typed.png")

# Step 4: Submit Login
print("Step 4: Submitting login...")
click(300, 418)
time.sleep(0.08)
send_key(0x0D)
time.sleep(4.0)

img2 = ImageGrab.grab(bbox=rect, all_screens=True)
img2.save(r"c:\Projects\JX\logs\p32572_auth_response.png")
print("Saved p32572_auth_response.png")
