import os
import sys
import time
import win32api
import win32gui
import win32process
import ctypes
from ctypes import wintypes
import psutil
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)

exe_path = r"C:\Projects\JX\runtime\JXHelper_Runtime.exe"
work_dir = r"C:\Projects\JX\runtime"

print(f"=== KHỞI ĐỘNG LIVE JXHELPER RUNTIME ===")
print(f"File: {exe_path}")

# Kiểm tra và dừng bản JXHelper cũ nếu còn chạy
for p in psutil.process_iter(['pid', 'name']):
    if 'jxhelper' in (p.info['name'] or '').lower():
        print(f"Dừng tiến trình JXHelper cũ: PID {p.info['pid']}")
        try:
            p.kill()
        except:
            pass

time.sleep(1)

# Khởi chạy qua ShellExecute
res = win32api.ShellExecute(0, "open", exe_path, "", work_dir, 1)
print(f"ShellExecute result: {res}")

# Chờ 3 giây để form nạp hoàn tất
time.sleep(3)

# Tìm tiến trình và cửa sổ JXHelper
jx_pids = [p.pid for p in psutil.process_iter(['pid', 'name']) if 'jxhelper' in (p.info['name'] or '').lower()]
print(f"JXHelper PIDs running: {jx_pids}")

hwnds = []
def enum_cb(h, _):
    txt_len = user32.GetWindowTextLengthW(h) + 1
    txt_buf = ctypes.create_unicode_buffer(txt_len)
    user32.GetWindowTextW(h, txt_buf, txt_len)
    title = txt_buf.value
    _, pid = win32process.GetWindowThreadProcessId(h)
    if pid in jx_pids or "JXHelper" in title:
        hwnds.append((h, pid, title, user32.IsWindowVisible(h)))
    return True

WNDENUMPROC = ctypes.WINFUNCTYPE(wintypes.BOOL, wintypes.HWND, wintypes.LPARAM)
user32.EnumDesktopWindows(hdesk, WNDENUMPROC(enum_cb), 0)

print(f"Found {len(hwnds)} JXHelper windows:")
for h, pid, title, vis in hwnds:
    print(f"  * HWND: {hex(h)} | PID: {pid} | Title: '{title}' | Visible: {vis}")
    rect = win32gui.GetWindowRect(h)
    print(f"    Rect: {rect}")
    if rect[2] > rect[0] and rect[3] > rect[1] and vis:
        img = ImageGrab.grab(bbox=rect)
        out_log = r"c:\Projects\JX\logs\jxhelper_live_started.png"
        out_art = r"C:\Users\Admin\.gemini\antigravity\brain\1b4a0d01-a767-4d3f-966f-116a863fc8de\jxhelper_live_started.png"
        img.save(out_log)
        img.save(out_art)
        print(f"    -> Đã chụp ảnh màn hình lưu vào: {out_log}")

print("=== KHỞI ĐỘNG THÀNH CÔNG ===")
