# Copyright (c) 2025 Patrick Motsch
# Flow control node definitions.

from modules.shared.i18nRegistry import t

FLOW_NODES = [
    {
        "id": "flow.ifElse",
        "category": "flow",
        "label": t("Wenn / Sonst"),
        "description": t("Verzweigung nach Bedingung"),
        "parameters": [
            {
                "name": "condition",
                "type": "string",
                "required": True,
                "frontendType": "condition",
                "description": t("Bedingung"),
            },
        ],
        "inputs": 1,
        "outputs": 2,
        "outputLabels": [t("Ja"), t("Nein")],
        "inputPorts": {0: {"accepts": ["Transit"]}},
        "outputPorts": {0: {"schema": "Transit"}, 1: {"schema": "Transit"}},
        "executor": "flow",
        "meta": {"icon": "mdi-source-branch", "color": "#FF9800"},
    },
    {
        "id": "flow.switch",
        "category": "flow",
        "label": t("Switch"),
        "description": t("Mehrere Zweige nach Wert"),
        "parameters": [
            {
                "name": "value",
                "type": "string",
                "required": True,
                "frontendType": "text",
                "description": t("Zu vergleichender Wert"),
            },
            {
                "name": "cases",
                "type": "array",
                "required": False,
                "frontendType": "caseList",
                "description": t("Fälle"),
            },
        ],
        "inputs": 1,
        "outputs": 1,
        "inputPorts": {0: {"accepts": ["Transit"]}},
        "outputPorts": {0: {"schema": "Transit"}},
        "executor": "flow",
        "meta": {"icon": "mdi-swap-horizontal", "color": "#FF9800"},
    },
    {
        "id": "flow.loop",
        "category": "flow",
        "label": t("Schleife / Für Jedes"),
        "description": t("Über Array-Elemente iterieren"),
        "parameters": [
            {
                "name": "items",
                "type": "string",
                "required": True,
                "frontendType": "text",
                "description": t("Pfad zum Array"),
            },
        ],
        "inputs": 1,
        "outputs": 1,
        "inputPorts": {0: {"accepts": ["Transit"]}},
        "outputPorts": {0: {"schema": "LoopItem"}},
        "executor": "flow",
        "meta": {"icon": "mdi-repeat", "color": "#FF9800"},
    },
    {
        "id": "flow.merge",
        "category": "flow",
        "label": t("Zusammenführen"),
        "description": t("Mehrere Zweige zusammenführen"),
        "parameters": [
            {
                "name": "mode",
                "type": "string",
                "required": False,
                "frontendType": "select",
                "frontendOptions": {"options": ["first", "all", "append"]},
                "description": t("Zusammenführungsmodus"),
                "default": "first",
            },
        ],
        "inputs": 2,
        "outputs": 1,
        "inputPorts": {0: {"accepts": ["Transit"]}, 1: {"accepts": ["Transit"]}},
        "outputPorts": {0: {"schema": "MergeResult"}},
        "executor": "flow",
        "meta": {"icon": "mdi-call-merge", "color": "#FF9800"},
    },
]
