// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

import QtQuick
import QtQuick.Layouts
import QtQuick.VirtualKeyboard
import QtQuick.VirtualKeyboard.Components

KeyboardLayoutLoader {
    function createInputMethod() {
        return Qt.createQmlObject('import QtQuick; import QtQuick.VirtualKeyboard.Plugins; JapaneseInputMethod {}', parent, "inputMethodSymbols.qml")
    }
    sharedLayouts: ['main']
    property int page
    readonly property int numPages: 3
    readonly property string inputModeName: {
        switch (InputContext.inputEngine.inputMode) {
        case InputEngine.Katakana:
            return "アイウ"
        case InputEngine.Hiragana:
            return "あいう"
        case InputEngine.HiraganaFlick:
            return "FLK"
        default:
            return "ABC"
        }
    }
    sourceComponent: {
        switch (page) {
        case 2: return page3
        case 1: return page2
        default: return page1
        }
    }
    Component {
        id: page1
        KeyboardLayout {
            keyWeight: 160
            readonly property real normalKeyWidth: normalKey.width
            readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
            KeyboardRow {
                Key {
                    key: Qt.Key_1
                    text: "1"
                }
                Key {
                    id: normalKey
                    key: Qt.Key_2
                    text: "2"
                }
                Key {
                    key: Qt.Key_3
                    text: "3"
                }
                Key {
                    key: Qt.Key_4
                    text: "4"
                }
                Key {
                    key: Qt.Key_5
                    text: "5"
                }
                Key {
                    key: Qt.Key_6
                    text: "6"
                }
                Key {
                    key: Qt.Key_7
                    text: "7"
                }
                Key {
                    key: Qt.Key_8
                    text: "8"
                }
                Key {
                    key: Qt.Key_9
                    text: "9"
                }
                Key {
                    key: Qt.Key_0
                    text: "0"
                }
            }
            KeyboardRow {
                Key {
                    key: Qt.Key_1
                    text: "@"
                }
                Key {
                    key: Qt.Key_1
                    text: "#"
                }
                Key {
                    key: Qt.Key_1
                    text: "%"
                }
                Key {
                    key: Qt.Key_1
                    text: "&"
                }
                Key {
                    key: Qt.Key_1
                    text: "*"
                }
                Key {
                    key: Qt.Key_1
                    text: "_"
                }
                Key {
                    key: Qt.Key_1
                    text: "-"
                }
                Key {
                    key: Qt.Key_1
                    text: "+"
                }
                Key {
                    key: Qt.Key_1
                    text: "("
                }
                Key {
                    key: Qt.Key_1
                    text: ")"
                }
            }
            KeyboardRow {
                Key {
                    displayText: (page + 1) + "/" + numPages
                    functionKey: true
                    onClicked: page = (page + 1) % numPages
                    highlighted: true
                }
                Key {
                    text: "“"
                }
                Key {
                    text: "”"
                }
                Key {
                    text: "、"
                }
                Key {
                    text: "："
                }
                Key {
                    text: "；"
                }
                Key {
                    text: "！"
                }
                Key {
                    text: "？"
                }
                Key {
                    text: "～"
                }
                BackspaceKey {
                }
            }
            KeyboardRow {
                SymbolModeKey {
                    weight: functionKeyWidth
                    Layout.fillWidth: false
                    displayText: inputModeName
                }
                ChangeLanguageKey {
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                }
                Key {
                    key: Qt.Key_Comma
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                    text: ","
                    smallText: "\u2699"
                    smallTextVisible: keyboard.isFunctionPopupListAvailable()
                    highlighted: true
                }
                SpaceKey {
                }
                Key {
                    key: Qt.Key_Period
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                    text: "—"
                    highlighted: true
                }
                HideKeyboardKey {
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                }
                EnterKey {
                    weight: functionKeyWidth
                    Layout.fillWidth: false
                }
            }
        }
    }
    Component {
        id: page2
        KeyboardLayout {
            keyWeight: 160
            readonly property real normalKeyWidth: normalKey.width
            readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
            KeyboardRow {
                Key {
                    text: "½"
                    alternativeKeys: "½¼¾"
                }
                Key {
                    id: normalKey
                    text: "'"
                }
                Key {
                    text: "/"
                }
                Key {
                    text: "\\"
                }
                Key {
                    text: "|"
                }
                Key {
                    text: "["
                }
                Key {
                    text: "]"
                }
                Key {
                    text: "{"
                }
                Key {
                    text: "}"
                }
                Key {
                    text: "·"
                }
            }
            KeyboardRow {
                Key {
                    text: "<"
                }
                Key {
                    text: ">"
                }
                Key {
                    text: ","
                }
                Key {
                    text: "."
                }
                Key {
                    text: ":"
                }
                Key {
                    text: ";"
                }
                Key {
                    text: "!"
                }
                Key {
                    text: "?"
                }
                Key {
                    text: "="
                }
                Key {
                    text: "~"
                }
            }
            KeyboardRow {
                Key {
                    displayText: (page + 1) + "/" + numPages
                    functionKey: true
                    onClicked: page = (page + 1) % numPages
                    highlighted: true
                }
                Key {
                    text: "\""
                }
                Key {
                    text: "§"
                }
                Key {
                    text: "^"
                }
                Key {
                    text: "$"
                }
                Key {
                    text: "￥"
                }
                Key {
                    text: "€"
                }
                Key {
                    text: "£"
                }
                Key {
                    text: "¢"
                }
                BackspaceKey {
                }
            }
            KeyboardRow {
                SymbolModeKey {
                    weight: functionKeyWidth
                    Layout.fillWidth: false
                    displayText: inputModeName
                }
                ChangeLanguageKey {
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                }
                Key {
                    key: Qt.Key_Comma
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                    text: ","
                    smallText: "\u2699"
                    smallTextVisible: keyboard.isFunctionPopupListAvailable()
                    highlighted: true
                }
                SpaceKey {
                }
                Key {
                    key: Qt.Key_Period
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                    text: "。"
                    highlighted: true
                }
                HideKeyboardKey {
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                }
                EnterKey {
                    weight: functionKeyWidth
                    Layout.fillWidth: false
                }
            }
        }
    }
    Component {
        id: page3
        KeyboardLayout {
            keyWeight: 160
            readonly property real normalKeyWidth: normalKey.width
            readonly property real functionKeyWidth: mapFromItem(normalKey, normalKey.width / 2, 0).x
            KeyboardRow {
                Key {
                    text: "＼"
                }
                Key {
                    id: normalKey
                    text: "／"
                }
                Key {
                    text: "（"
                }
                Key {
                    text: "）"
                }
                Key {
                    text: "〔"
                }
                Key {
                    text: "〕"
                }
                Key {
                    text: "〈"
                }
                Key {
                    text: "〉"
                }
                Key {
                    text: "《"
                }
                Key {
                    text: "》"
                }
            }
            KeyboardRow {
                Key {
                    text: "→"
                }
                Key {
                    text: "←"
                }
                Key {
                    text: "↑"
                }
                Key {
                    text: "↓"
                }
                Key {
                    text: "■"
                }
                Key {
                    text: "□"
                }
                Key {
                    text: "●"
                }
                Key {
                    text: "○"
                }
                Key {
                    text: "【"
                }
                Key {
                    text: "】"
                }
            }
            KeyboardRow {
                Key {
                    displayText: (page + 1) + "/" + numPages
                    functionKey: true
                    onClicked: page = (page + 1) % numPages
                    highlighted: true
                }
                Key {
                    text: "『"
                }
                Key {
                    text: "』"
                }
                Key {
                    text: "「"
                }
                Key {
                    text: "」"
                }
                Key {
                    text: "★"
                }
                Key {
                    text: "☆"
                }
                Key {
                    text: "◆"
                }
                Key {
                    text: "◇"
                }
                BackspaceKey {
                }
            }
            KeyboardRow {
                SymbolModeKey {
                    weight: functionKeyWidth
                    Layout.fillWidth: false
                    displayText: inputModeName
                }
                ChangeLanguageKey {
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                }
                Key {
                    key: Qt.Key_Comma
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                    text: ","
                    smallText: "\u2699"
                    smallTextVisible: keyboard.isFunctionPopupListAvailable()
                    highlighted: true
                }
                SpaceKey {
                }
                Key {
                    key: Qt.Key_Period
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                    text: "…"
                    highlighted: true
                }
                HideKeyboardKey {
                    weight: normalKeyWidth
                    Layout.fillWidth: false
                }
                EnterKey {
                    weight: functionKeyWidth
                    Layout.fillWidth: false
                }
            }
        }
    }
}
