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 = 0x00E207F6 # PID 30076

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) # WM_MOUSEMOVE
    time.sleep(0.03)
    user32.PostMessageW(hwnd, 0x0201, 1, lp) # WM_LBUTTONDOWN
    time.sleep(0.08)
    user32.PostMessageW(hwnd, 0x0202, 0, lp) # WM_LBUTTONUP
    time.sleep(0.05)

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

def send_char(c):
    # WM_CHAR
    sc = user32.MapVirtualKeyW(ord(c), 0)
    lp = 1 | (sc << 16)
    user32.PostMessageW(hwnd, 0x0102, ord(c), lp)
    time.sleep(0.04)

print("Bringing window to front...")
user32.SetForegroundWindow(hwnd)
time.sleep(0.2)

# Focus password at (400, 339)
print("Focusing password box at (400, 339)...")
click(400, 339)
time.sleep(0.15)

# Clear password box
send_key(0x23) # VK_END
time.sleep(0.02)
for _ in range(30):
    send_key(0x08) # VK_BACK
time.sleep(0.02)
send_key(0x24) # VK_HOME
time.sleep(0.02)
for _ in range(30):
    send_key(0x2E) # VK_DELETE
time.sleep(0.1)

# Type password Ngu123@@
print("Typing password 'Ngu123@@'...")
for c in "Ngu123@@":
    send_char(c)
time.sleep(0.3)

# Capture screenshot with password entered
rect = win32gui.GetWindowRect(hwnd)
img1 = ImageGrab.grab(bbox=rect, all_screens=True)
img1.save(r"c:\Projects\JX\logs\step1_pw_entered.png")
print("Saved step1_pw_entered.png")

# Click 'Xac dinh' button at (300, 442) or send Enter
print("Submitting login via Enter and click (300, 442)...")
send_key(0x0D) # VK_RETURN
time.sleep(0.1)
click(300, 442) # 'Xác định' button

print("Waiting for server response (4 seconds)...")
time.sleep(4.0)

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