pragma Singleton
import QtQuick
import Quickshell
import Quickshell.Hyprland

QtObject {
    id: inputManager

    property var handlers: ({})

    function openShell() {
        ShellStateManager.openShell();
    }

    function closeShell() {
        ShellStateManager.closeShell();
    }

    function registerHandler(context, handler) {
        handlers[context] = handler;
    }

    function unregisterHandler(context) {
        handlers[context] = undefined;
        if (handlers.hasOwnProperty(context))
            delete handlers[context];
    }

    function handleKeyInternal(key) {
        if (!ShellStateManager.shellOpen)
            return false;

        var context = "topbar";
        if (ShellStateManager.appLauncherOpen)
            context = "appLauncher";
        else if (ShellStateManager.quickSettingsOpen)
            context = "quickSettings";
        else if (ShellStateManager.powerMenuOpen)
            context = "powerMenu";
        var handler = handlers[context];
        if (handler) {
            var handled = handler(key);
            if (handled)
                return true;
        }

        if (key === Qt.Key_Escape || key === Qt.Key_Shift || key === Qt.Key_X) {
            if (context === "appLauncher") {
                ShellStateManager.closeAppLauncher();
            } else if (context === "quickSettings") {
                ShellStateManager.closeQuickSettings();
            } else if (context === "powerMenu") {
                ShellStateManager.closePowerMenu();
            } else if (context === "topbar") {
                ShellStateManager.closeShell();
                Hyprland.dispatch("submap reset");
            }
            return true;
        }

        return false;
    }

    function handleKey(event) {
        handleKeyInternal(event.key);
    }

}
