import ctypes, time
from ctypes import wintypes
import win32gui
from PIL import ImageGrab

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

hwnd = 0x60b66 # PID 29956 (MeCuaCacCon / nguvansi3)
print(f"Testing live login on PID 29956 (HWND {hex(hwnd)})")

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

WM_ACTIVATE = 0x0006
WM_SETFOCUS = 0x0007
WM_MOUSEMOVE = 0x0200
WM_LBUTTONDOWN = 0x0201
WM_LBUTTONUP = 0x0202
WM_LBUTTONDBLCLK = 0x0203
WM_KEYDOWN = 0x0100
WM_KEYUP = 0x0101
WM_CHAR = 0x0102
VK_BACK = 0x08
VK_TAB = 0x09
VK_RETURN = 0x0D

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

def send_key(vk):
    lp = (0x1C << 16) | 1
    user32.PostMessageW(hwnd, WM_KEYDOWN, vk, lp)
    time.sleep(0.04)
    user32.PostMessageW(hwnd, WM_KEYUP, vk, lp | (3 << 30))
    time.sleep(0.03)

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

def click_client(x, y):
    lp = make_lparam(x, y)
    user32.PostMessageW(hwnd, WM_MOUSEMOVE, 0, lp)
    time.sleep(0.04)
    user32.PostMessageW(hwnd, WM_LBUTTONDOWN, 1, lp)
    time.sleep(0.08)
    user32.PostMessageW(hwnd, WM_LBUTTONUP, 0, lp)
    time.sleep(0.05)

def dblclick_client(x, y):
    lp = make_lparam(x, y)
    user32.PostMessageW(hwnd, WM_MOUSEMOVE, 0, lp)
    time.sleep(0.03)
    user32.PostMessageW(hwnd, WM_LBUTTONDOWN, 1, lp)
    time.sleep(0.05)
    user32.PostMessageW(hwnd, WM_LBUTTONUP, 0, lp)
    time.sleep(0.08)
    user32.PostMessageW(hwnd, WM_LBUTTONDBLCLK, 1, lp)
    time.sleep(0.05)
    user32.PostMessageW(hwnd, WM_LBUTTONUP, 0, lp)
    time.sleep(0.05)

# Step 1: Click "Bắt đầu trò chơi"
print("Step 1: Click 'Bắt đầu trò chơi'...")
click_client(400, 382)
send_key(VK_RETURN)
time.sleep(1.8)

# Step 2: Confirm 'Nhắc nhở'
print("Step 2: Confirm 'Nhắc nhở'...")
click_client(400, 440)
send_key(VK_RETURN)
time.sleep(1.8)

# Step 3: Server selection
print("Step 3: Click 'Võ Công Truyền Kỳ' bên trái...")
click_client(237, 209)
time.sleep(0.6)

print("Step 3b: Click 'Trọn Vẹn Chữ Tình' bên phải...")
click_client(647, 204)
time.sleep(0.3)
dblclick_client(647, 204)
time.sleep(0.4)

print("Step 3c: Click 'Xác định' máy chủ...")
click_client(257, 507)
send_key(VK_RETURN)
time.sleep(2.0)

# Step 4: Login Credentials (nguvansi3 / Ngu123@@)
print("Step 4: Fill Username (nguvansi3)...")
click_client(464, 302)
time.sleep(0.1)
for _ in range(30): send_key(VK_BACK)
time.sleep(0.1)
for c in "nguvansi3": send_char(c)
time.sleep(0.2)

print("Step 4b: Fill Password (Ngu123@@)...")
send_key(VK_TAB)
time.sleep(0.1)
for _ in range(30): send_key(VK_BACK)
time.sleep(0.1)
for c in "Ngu123@@": send_char(c)
time.sleep(0.2)

# Step 4c: Submit login
print("Step 4c: Submit login...")
send_key(VK_RETURN)
time.sleep(3.5)

# Capture
rect = win32gui.GetWindowRect(hwnd)
if rect[2] > rect[0] and rect[3] > rect[1]:
    img = ImageGrab.grab(bbox=rect)
    img.save(r"C:\Projects\JX\logs\mecuacaccon_live_login_result.png")
    print("Saved mecuacaccon_live_login_result.png")

with open(r'c:\Projects\JX\logs\elevated_click_result.txt', 'w', encoding='utf-8') as f:
    f.write("MeCuaCacCon full login sequence done.\n")
