pragma Singleton
import QtQuick

QtObject {
    enum Orientation {
        Horizontal,
        Vertical
    }

    enum Position {
        Top,
        Bottom
    }

    enum Network {
        Wired,
        Wireless,
        Virtual
    }

    /**
     * I would prefer to use stdlib enum conversion functions:
     * https://doc.qt.io/qt-6/qtqml-typesystem-enumerations.html
     * But these aren't defined in Quickshell v0.2.1, for some reason, even
     * though it does use Qt 6.10...
     */
    function stringToOrientation(str) {
        const normalized = str.toLowerCase();
        switch (normalized) {
        case "horizontal":
            return Types.Orientation.Horizontal;
        case "vertical":
            return Types.Orientation.Vertical;
        default:
            console.error("Error: invalid Orientation value:", str)
            return -1;
        }
    }

    function orientationToString(value) {
        switch (value) {
        case Types.Orientation.Horizontal:
            return "horizontal"
        case Types.Orientation.Vertical:
            return "vertical"
        default:
            console.error("Error: invalid Orientation value:", value)
            return "";
        }
    }

    function stringToPosition(str) {
        const normalized = str.toLowerCase();
        switch (normalized) {
        case "top":
            return Types.Position.Top;
        case "bottom":
            return Types.Position.Bottom;
        default:
            console.error("Error: invalid Position value:", str)
            return -1;
        }
    }

    function positionToString(value) {
        switch (value) {
        case Types.Position.Top:
            return "top"
        case Types.Position.Bottom:
            return "bottom"
        default:
            console.error("Error: invalid Position value:", value)
            return "";
        }
    }

    function stringToNetwork(str) {
        const normalized = str.toLowerCase();
        switch (normalized) {
        case "wired":
            return Types.Network.Wired;
        case "wireless":
            return Types.Network.Wireless;
        case "virtual":
            return Types.Network.Virtual;
        default:
            console.error("Error: invalid Network value:", str)
            return -1;
        }
    }

    function networkToString(value) {
        switch (value) {
        case Types.Network.Wired:
            return "wired"
        case Types.Network.Wireless:
            return "wireless"
        case Types.Network.Virtual:
            return "virtual";
        default:
            console.error("Error: invalid Network value:", value)
            return "";
        }
    }
}