var KeyNames = (function (qt) {
    const KeyMappings = {
        // 修饰键
        [qt.Key_Control]: "Ctrl",
        [qt.Key_Control_R]: "Ctrl",
        [qt.Key_Shift]: "Shift",
        [qt.Key_Shift_R]: "Shift",
        [qt.Key_Alt]: "Alt",
        [qt.Key_Alt_R]: "Alt",
        [qt.Key_AltGr]: "Alt",
        [qt.Key_Meta]: "Super_L",
        [qt.Key_Meta_R]: "Super_R",
        [qt.Key_Super]: "Super",
        [qt.Key_NumLock]: "Num Lock",
        [qt.Key_ScrollLock]: "Scroll Lock",

        // 特殊功能键
        [qt.Key_Space]: "Space",
        [qt.Key_Enter]: "Enter",
        [qt.Key_Return]: "Return",
        [qt.Key_Escape]: "Esc",
        [qt.Key_Backspace]: "Backspace",
        [qt.Key_Delete]: "Delete",
        [qt.Key_CapsLock]: "CapsLock",
        [qt.Key_Left]: "Left Arrow",
        [qt.Key_Up]: "Up Arrow",
        [qt.Key_Right]: "Right Arrow",
        [qt.Key_Down]: "Down Arrow",
        [qt.Key_Insert]: "Insert",
        [qt.Key_Delete]: "Delete",
        [qt.Key_Home]: "Home",
        [qt.Key_End]: "End",
        [qt.Key_PageUp]: "Page Up",
        [qt.Key_PageDown]: "Page Down",
        [qt.Key_F1]: "F1",
        [qt.Key_F2]: "F2",
        [qt.Key_F3]: "F3",
        [qt.Key_F4]: "F4",
        [qt.Key_F5]: "F5",
        [qt.Key_F6]: "F6",
        [qt.Key_F7]: "F7",
        [qt.Key_F8]: "F8",
        [qt.Key_F9]: "F9",
        [qt.Key_F10]: "F10",
        [qt.Key_F11]: "F11",
        [qt.Key_F12]: "F12",
        [qt.Key_F13]: "F13",

        // 数字键（小键盘区）
        [qt.Key_Num0]: "Num 0",
        [qt.Key_Num1]: "Num 1",
        [qt.Key_Num2]: "Num 2",
        [qt.Key_Num3]: "Num 3",
        [qt.Key_Num4]: "Num 4",
        [qt.Key_Num5]: "Num 5",
        [qt.Key_Num6]: "Num 6",
        [qt.Key_Num7]: "Num 7",
        [qt.Key_Num8]: "Num 8",
        [qt.Key_Num9]: "Num 9",
        [qt.Key_Multiply]: "Multiply",
        [qt.Key_Add]: "Add",
        [qt.Key_Subtract]: "Subtract",
        [qt.Key_Decimal]: "Decimal",
        [qt.Key_Divide]: "Divide"
    };

    return {
        mappings: KeyMappings,
        getName: function (key) {
            const numKey = Number(key);
            return this.mappings[numKey] || String.fromCharCode(numKey);
        }
    };
})(Qt);

function getKeyName(key) {
    return KeyNames.getName(key);
}

const cppToQmlKeyMap = {
    "Control_R": "Ctrl_R",
    "Control": "Ctrl",
    "Control_L": "Ctrl_L",
    "Shift_L": "Shift_L",
    "Shift_R": "Shift_R",
    "Alt_L": "Alt_L",
    "Alt_R": "Alt_R",
    "space": "Space",
    "Meta_L": "Meta_L",
    "Meta_R": "Meta_R",
    "Super_L": "Super_L",
    "Super_R": "Super_R",
    "space": "Space",
    "Escape": "Esc",
    "Return": "Enter",
    "Backspace": "Backspace",
    "KP_1": "Num 1",
    "KP_2": "Num 2",
    "KP_3": "Num 3",
    "KP_4": "Num 4",
    "KP_5": "Num 5",
    "KP_6": "Num 6",
    "KP_7": "Num 7",
    "KP_8": "Num 8",
    "KP_9": "Num 9",

    "asciitilde": "~",

    "grave": "`",

    "at": "@",
    "numbersign": "#",
    "dollar": "$",
    "percent": "%",
    "asciicircum": "^",
    "ampersand": "&",
    "asterisk": "*",
    "parenleft": "(",
    "parenright": ")",
    "underscore": "_",
    "plus": "+"
};

const qmlToCppKeyMap = {
    "Ctrl": "Control",
    "Ctrl_L": "Control_L",
    "Shift": "Shift",
    "Shift_L": "Shift_L",
    "Ctrl_R": "Control_R",
    "Shift_R": "Shift_R",
    "Alt": "Alt",
    "Super_L": "Super_L",
    "Super_R": "Super_R",
    "Meta": "Meta_L",
    "Space": "space",
    "Esc": "Escape",
    "Enter": "Return",
    "Backspace": "Backspace",
    "Num 1": "KP_1",
    "Num 2": "KP_2",
    "Num 3": "KP_3",
    "Num 4": "KP_4",
    "Num 5": "KP_5",
    "Num 6": "KP_6",
    "Num 7": "KP_7",
    "Num 8": "KP_8",
    "Num 9": "KP_9",

    "`": "grave",
    "~": "asciitilde",
    "@": "at",
    "#": "numbersign",
    "$": "dollar",
    "%": "percent",
    "^": "asciicircum",
    "&": "ampersand",
    "*": "asterisk",
    "(": "parenleft",
    ")": "parenright",
    "_": "underscore",
    "+": "plus"
};
const scanCodeMap = {
    49: "~",
    50: "Shift_L",
    62: "Shift_R",
    37: "Ctrl_L",
    105: "Ctrl_R",
    64: "Alt_L",
    108: "Alt_R",
    10: "!",
    11: "@",
    12: "#",
    13: "$",
    14: "%",
    15: "^",
    16: "&",
    17: "*",
    18: "(",
    19: ")"
};

const scanCodeKeyPadMap = {
    87: "Num 1",
    88: "Num 2",
    89: "Num 3",
    83: "Num 4",
    84: "Num 5",
    85: "Num 6",
    79: "Num 7",
    80: "Num 8",
    81: "Num 9",
    19: ")",

    106: "/",
    63: "*",
    82: "-",
    86: "+",
};
const KeyMaps = {
    scanCode: scanCodeMap,
    scanCodeKeyPad: scanCodeKeyPadMap,
    cppToQml: cppToQmlKeyMap,
    qmlToCpp: qmlToCppKeyMap
};
const mainKbDigitMofified = ["~", "!",
    "@",
    "#",
    "$",
    "%",
    "^",
    "&",
    "*",
    "(",
    ")"];

