{
  "name": "Blocs intégrés",
  "description": "Blocs de workflow de base pour les automatisations BRIKA",
  "blocks": {
    "clock": {
      "name": "Clock",
      "description": "Émettre des ticks périodiques à un intervalle configurable",
      "ports": {
        "tick": {
          "name": "Tick",
          "description": "Émis à chaque intervalle avec compteur et timestamp"
        }
      }
    },
    "http-request": {
      "name": "HTTP Request",
      "description": "Effectuer des requêtes HTTP vers des APIs externes",
      "ports": {
        "trigger": {
          "name": "Trigger",
          "description": "Déclencher la requête HTTP"
        },
        "response": {
          "name": "Response",
          "description": "Réponse HTTP avec status, headers et body"
        },
        "error": {
          "name": "Error",
          "description": "Détails de l'erreur si la requête échoue"
        }
      }
    },
    "condition": {
      "name": "Condition",
      "description": "Brancher le flux selon une condition",
      "ports": {
        "in": {
          "name": "In",
          "description": "Valeur à évaluer"
        },
        "then": {
          "name": "Then",
          "description": "Sortie si la condition est vraie"
        },
        "else": {
          "name": "Else",
          "description": "Sortie si la condition est fausse"
        }
      }
    },
    "switch": {
      "name": "Switch",
      "description": "Branchement multiple selon une valeur",
      "ports": {
        "in": {
          "name": "In",
          "description": "Valeur à évaluer"
        },
        "case1": {
          "name": "Case 1",
          "description": "Première sortie"
        },
        "case2": {
          "name": "Case 2",
          "description": "Deuxième sortie"
        },
        "case3": {
          "name": "Case 3",
          "description": "Troisième sortie"
        },
        "default": {
          "name": "Default",
          "description": "Sortie par défaut si aucun cas ne correspond"
        }
      }
    },
    "delay": {
      "name": "Delay",
      "description": "Attendre une durée spécifiée avant de continuer",
      "ports": {
        "in": {
          "name": "In",
          "description": "Données à retarder"
        },
        "out": {
          "name": "Out",
          "description": "Données après le délai"
        }
      }
    },
    "transform": {
      "name": "Transform",
      "description": "Transformer ou extraire des données",
      "ports": {
        "in": {
          "name": "In",
          "description": "Données d'entrée"
        },
        "out": {
          "name": "Out",
          "description": "Données transformées"
        }
      }
    },
    "log": {
      "name": "Log",
      "description": "Enregistrer un message dans les logs",
      "ports": {
        "in": {
          "name": "In",
          "description": "Données à logger"
        },
        "out": {
          "name": "Out",
          "description": "Données transmises sans modification"
        }
      }
    },
    "merge": {
      "name": "Merge",
      "description": "Attendre et combiner plusieurs entrées",
      "ports": {
        "a": {
          "name": "Input A",
          "description": "Première entrée"
        },
        "b": {
          "name": "Input B",
          "description": "Deuxième entrée"
        },
        "out": {
          "name": "Out",
          "description": "Entrées combinées"
        }
      }
    },
    "split": {
      "name": "Split",
      "description": "Diviser le flux en branches parallèles",
      "ports": {
        "in": {
          "name": "In",
          "description": "Données à diviser"
        },
        "a": {
          "name": "Branch A",
          "description": "Première branche"
        },
        "b": {
          "name": "Branch B",
          "description": "Deuxième branche"
        }
      }
    },
    "end": {
      "name": "End",
      "description": "Terminer l'exécution du workflow",
      "ports": {
        "in": {
          "name": "In",
          "description": "Données finales"
        }
      }
    },
    "spark-receiver": {
      "name": "Récepteur Spark",
      "description": "Reçoit des événements spark typés des plugins",
      "ports": {
        "out": {
          "name": "Payload",
          "description": "Le payload de l'événement spark"
        }
      }
    }
  },
  "fields": {
    "field": {
      "label": "Field",
      "description": "Chemin du champ à évaluer (ex: \"value\", \"data.status\")"
    },
    "operator": {
      "label": "Operator",
      "description": "Opérateur de comparaison"
    },
    "value": {
      "label": "Value",
      "description": "Valeur à comparer"
    },
    "case1": {
      "label": "Case 1",
      "description": "Valeur pour le cas 1"
    },
    "case2": {
      "label": "Case 2",
      "description": "Valeur pour le cas 2"
    },
    "case3": {
      "label": "Case 3",
      "description": "Valeur pour le cas 3"
    },
    "duration": {
      "label": "Duration",
      "description": "Durée d'attente"
    },
    "message": {
      "label": "Message",
      "description": "Template du message avec expressions {{inputs.in.field}}"
    },
    "level": {
      "label": "Level",
      "description": "Niveau de log"
    },
    "status": {
      "label": "Status",
      "description": "Status de fin du workflow"
    },
    "template": {
      "label": "Template",
      "description": "Template pour construire l'objet de sortie"
    },
    "interval": {
      "label": "Interval",
      "description": "Temps entre les ticks"
    },
    "emitOnStart": {
      "label": "Emit on Start",
      "description": "Émettre un tick immédiatement au démarrage"
    },
    "url": {
      "label": "URL",
      "description": "URL de la requête"
    },
    "method": {
      "label": "Method",
      "description": "Méthode HTTP (GET, POST, PUT, PATCH, DELETE)"
    },
    "headers": {
      "label": "Headers",
      "description": "Headers HTTP de la requête"
    },
    "body": {
      "label": "Body",
      "description": "Corps de la requête (pour POST/PUT/PATCH)"
    },
    "timeout": {
      "label": "Timeout",
      "description": "Délai d'expiration de la requête"
    },
    "sparkType": {
      "label": "Type de Spark",
      "description": "Le type de spark à écouter (ex: timer:tick)"
    }
  }
}
