import sys, time, ctypes, shutil
import win32gui
from PIL import ImageGrab

sys.stdout.reconfigure(encoding='utf-8')
user32 = ctypes.windll.user32
hdesk = user32.OpenInputDesktop(0, False, 0x01FF)
if hdesk: user32.SetThreadDesktop(hdesk)

hwnd = 0x0063003A
print(f"Target HWND: 0x{hwnd:X}, Valid: {win32gui.IsWindow(hwnd)}")

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_down = 1 | (sc << 16)
    lp_up = 1 | (sc << 16) | (3 << 30)
    user32.PostMessageW(hwnd, 0x0100, vk, lp_down)
    time.sleep(0.05)
    user32.PostMessageW(hwnd, 0x0101, vk, lp_up)
    time.sleep(0.05)

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

def capture(name):
    if win32gui.IsWindow(hwnd):
        rect = win32gui.GetWindowRect(hwnd)
        img = ImageGrab.grab(bbox=rect, all_screens=True)
        path = rf"c:\Projects\JX\logs\{name}"
        img.save(path)
        print(f"Captured: {path}")

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

# Right now focus is on 'Hủy bỏ'. Press Tab ONCE to enter 'Tên tài khoản:'
print("Step 1: Press Tab to focus 'Tên tài khoản:'...")
send_key(0x09) # VK_TAB
time.sleep(0.3)
capture("p2488_focus_username.png")

# Step 2: Clear old text and type username 'nguvansi1'
print("Step 2: Typing username 'nguvansi1'...")
send_key(0x23) # VK_END
for _ in range(25): send_key(0x08)
send_key(0x24) # VK_HOME
for _ in range(25): send_key(0x2E)
time.sleep(0.1)
for c in "nguvansi1":
    send_char(c)
time.sleep(0.3)
capture("p2488_username_filled.png")

# Step 3: Press Tab to focus 'Mật mã:'
print("Step 3: Press Tab to focus 'Mật mã:'...")
send_key(0x09) # VK_TAB
time.sleep(0.3)

# Clear old text and type password 'Ngu123@@'
print("Step 3b: Typing password 'Ngu123@@'...")
send_key(0x23) # VK_END
for _ in range(30): send_key(0x08)
send_key(0x24) # VK_HOME
for _ in range(30): send_key(0x2E)
time.sleep(0.1)
for c in "Ngu123@@":
    send_char(c)
time.sleep(0.3)
capture("p2488_both_filled.png")

# Step 4: Submit Login credentials
print("Step 4: Submitting login credentials...")
send_key(0x0D) # VK_RETURN
time.sleep(4.5)
capture("p2488_char_select.png")

# Step 5: Character select -> Vào trò chơi
print("Step 5: Selecting Slot 1 (ConCuaBoMe) and entering game...")
click(250, 350)
time.sleep(0.2)
dblclick(250, 350)
time.sleep(0.3)
click(92, 561) # Vào trò chơi
time.sleep(0.1)
send_key(0x0D)
time.sleep(5.0)

# Step 6: Dismiss in-game popup
print("Step 6: Dismissing in-game popup...")
click(300, 570)
time.sleep(0.3)
send_key(0x1B) # ESC
time.sleep(0.5)

capture("in_game_nguvansi1_verified.png")
shutil.copyfile(r"c:\Projects\JX\logs\in_game_nguvansi1_verified.png", r"C:\Users\Admin\.gemini\antigravity\brain\1b4a0d01-a767-4d3f-966f-116a863fc8de\in_game_nguvansi1_verified.png")
print("SUCCESSFULLY COMPLETED LOGIN FOR NGUVANSI1!")
