import ctypes
import time
from ctypes import wintypes
wintypes.ULONG_PTR = wintypes.WPARAM
hllDll = ctypes.WinDLL("User32.dll", use_last_error=True)
VK_HANGUEL = 0x15

class MOUSEINPUT(ctypes.Structure):
    _fields_ = (("dx",          wintypes.LONG),
                ("dy",          wintypes.LONG),
                ("mouseData",   wintypes.DWORD),
                ("dwFlags",     wintypes.DWORD),
                ("time",        wintypes.DWORD),
                ("dwExtraInfo", wintypes.ULONG_PTR))

class HARDWAREINPUT(ctypes.Structure):
    _fields_ = (("uMsg",    wintypes.DWORD),
                ("wParamL", wintypes.WORD),
                ("wParamH", wintypes.WORD))

class KEYBDINPUT(ctypes.Structure):
    _fields_ = (("wVk",         wintypes.WORD),
                ("wScan",       wintypes.WORD),
                ("dwFlags",     wintypes.DWORD),
                ("time",        wintypes.DWORD),
                ("dwExtraInfo", wintypes.ULONG_PTR))

class INPUT(ctypes.Structure):
    class _INPUT(ctypes.Union):
        _fields_ = (("ki", KEYBDINPUT),
                    ("mi", MOUSEINPUT),
                    ("hi", HARDWAREINPUT))
    _anonymous_ = ("_input",)
    _fields_ = (("type",   wintypes.DWORD),
                ("_input", _INPUT))

def get_hanguel_state():
    # 현재 한/영 전환 키의 상태를 확인하는 함수
    return hllDll.GetKeyState(VK_HANGUEL)

def change_state():
    # 한/영 키 전환 함수
    x = INPUT(type=1 ,ki=KEYBDINPUT(wVk=VK_HANGUEL))
    y = INPUT(type=1, ki=KEYBDINPUT(wVk=VK_HANGUEL,dwFlags=2))
    hllDll.SendInput(1, ctypes.byref(x), ctypes.sizeof(x))
    time.sleep(0.05)
    hllDll.SendInput(1, ctypes.byref(y), ctypes.sizeof(y))

def set_keyboard_language(target_lang):
    """
    한글 또는 영어로 키보드 상태를 전환하는 함수.
    
    Args:
    target_lang (str): 'kor'이면 한글로 전환, 'eng'이면 영어로 전환.
    """
    current_state = get_hanguel_state()
    
    if target_lang == 'kor' and current_state == 0:
        # 현재 영어인 경우 한글로 전환
        change_state()
        print("키보드를 한글로 전환했습니다.")
    elif target_lang == 'eng' and current_state == 1:
        # 현재 한글인 경우 영어로 전환
        change_state()
        print("키보드를 영어로 전환했습니다.")
    else:
        # 이미 원하는 상태인 경우
        print(f"이미 {target_lang} 상태입니다.")

# # 사용 예시
# set_keyboard_language('kor')  # 한글로 전환
# set_keyboard_language('eng')  # 영어로 전환
