# yamllint disable
# Workflow Template for Synkra AIOX
# This template is used by aiox-developer to create new workflows
# Variables are replaced during generation: {{VARIABLE_NAME}}
#
# NOTE: This file contains Handlebars template directives ({{...}}) that are
# NOT valid YAML. It is pre-processed by the workflow creation engine before use.
# Do NOT validate this file directly with yamllint.

workflow:
  id: "{{WORKFLOW_ID}}"
  name: "{{WORKFLOW_NAME}}"
  description: "{{WORKFLOW_DESCRIPTION}}"
  version: "{{WORKFLOW_VERSION}}"
  type: "{{WORKFLOW_TYPE}}"  # sequential, parallel, conditional
  
{{#IF_CONTEXT}}
context:
  target: "{{TARGET_CONTEXT}}"  # core | squad | hybrid
  {{#IF_SQUAD}}
  squad: "{{SQUAD_NAME}}"
  {{/IF_SQUAD}}
  {{#IF_HYBRID}}
  resolution_order: "squad-first, core-fallback"
  note: "Agents are resolved from squad first; if not found, falls back to core agents"
  {{/IF_HYBRID}}
{{/IF_CONTEXT}}

metadata:
  author: "{{AUTHOR}}"
  created_date: "{{CREATED_DATE}}"
  last_modified: "{{LAST_MODIFIED}}"
  tags:
    {{#EACH_TAGS}}
    - {{TAG}}
    {{/EACH_TAGS}}

{{#IF_TRIGGERS}}
triggers:
  {{#EACH_TRIGGERS}}
  - type: "{{TRIGGER_TYPE}}"
    condition: "{{TRIGGER_CONDITION}}"
    {{#IF_TRIGGER_PARAMS}}
    parameters:
      {{#EACH_TRIGGER_PARAMS}}
      {{PARAM_KEY}}: "{{PARAM_VALUE}}"
      {{/EACH_TRIGGER_PARAMS}}
    {{/IF_TRIGGER_PARAMS}}
  {{/EACH_TRIGGERS}}
{{/IF_TRIGGERS}}

{{#IF_INPUTS}}
inputs:
  {{#EACH_INPUTS}}
  {{INPUT_NAME}}:
    type: "{{INPUT_TYPE}}"
    description: "{{INPUT_DESCRIPTION}}"
    required: {{INPUT_REQUIRED}}
    {{#IF_INPUT_DEFAULT}}
    default: "{{INPUT_DEFAULT}}"
    {{/IF_INPUT_DEFAULT}}
    {{#IF_INPUT_VALIDATION}}
    validation: "{{INPUT_VALIDATION}}"
    {{/IF_INPUT_VALIDATION}}
  {{/EACH_INPUTS}}
{{/IF_INPUTS}}

steps:
  {{#EACH_STEPS}}
  - id: "{{STEP_ID}}"
    name: "{{STEP_NAME}}"
    type: "{{STEP_TYPE}}"  # agent, task, subprocess, condition
    {{#IF_STEP_AGENT}}
    agent: "{{STEP_AGENT}}"
    {{/IF_STEP_AGENT}}
    {{#IF_STEP_TASK}}
    task: "{{STEP_TASK}}"
    {{/IF_STEP_TASK}}
    {{#IF_STEP_COMMAND}}
    command: "{{STEP_COMMAND}}"
    {{/IF_STEP_COMMAND}}
    {{#IF_STEP_INPUTS}}
    inputs:
      {{#EACH_STEP_INPUTS}}
      {{INPUT_KEY}}: "{{INPUT_VALUE}}"
      {{/EACH_STEP_INPUTS}}
    {{/IF_STEP_INPUTS}}
    {{#IF_STEP_CONDITIONS}}
    conditions:
      {{#EACH_CONDITIONS}}
      - type: "{{CONDITION_TYPE}}"
        expression: "{{CONDITION_EXPRESSION}}"
        {{#IF_CONDITION_ACTIONS}}
        on_true: "{{ON_TRUE_ACTION}}"
        on_false: "{{ON_FALSE_ACTION}}"
        {{/IF_CONDITION_ACTIONS}}
      {{/EACH_CONDITIONS}}
    {{/IF_STEP_CONDITIONS}}
    {{#IF_STEP_ERROR_HANDLING}}
    error_handling:
      strategy: "{{ERROR_STRATEGY}}"  # fail, retry, skip, fallback
      {{#IF_RETRY_CONFIG}}
      retry_attempts: {{RETRY_ATTEMPTS}}
      retry_delay: {{RETRY_DELAY}}
      {{/IF_RETRY_CONFIG}}
      {{#IF_FALLBACK_STEP}}
      fallback_step: "{{FALLBACK_STEP}}"
      {{/IF_FALLBACK_STEP}}
    {{/IF_STEP_ERROR_HANDLING}}
    {{#IF_STEP_OUTPUTS}}
    outputs:
      {{#EACH_STEP_OUTPUTS}}
      {{OUTPUT_KEY}}: "{{OUTPUT_VALUE}}"
      {{/EACH_STEP_OUTPUTS}}
    {{/IF_STEP_OUTPUTS}}
  {{/EACH_STEPS}}

{{#IF_OUTPUTS}}
outputs:
  {{#EACH_OUTPUTS}}
  {{OUTPUT_NAME}}:
    type: "{{OUTPUT_TYPE}}"
    description: "{{OUTPUT_DESCRIPTION}}"
    source: "{{OUTPUT_SOURCE}}"  # step_id.output_key
  {{/EACH_OUTPUTS}}
{{/IF_OUTPUTS}}

{{#IF_ERROR_HANDLING}}
global_error_handling:
  on_error: "{{GLOBAL_ERROR_ACTION}}"  # abort, continue, rollback
  notification:
    enabled: {{NOTIFICATION_ENABLED}}
    {{#IF_NOTIFICATION_CHANNELS}}
    channels:
      {{#EACH_CHANNELS}}
      - {{CHANNEL}}
      {{/EACH_CHANNELS}}
    {{/IF_NOTIFICATION_CHANNELS}}
{{/IF_ERROR_HANDLING}}

{{#IF_SECURITY}}
security:
  authorization_required: {{AUTH_REQUIRED}}
  {{#IF_ALLOWED_ROLES}}
  allowed_roles:
    {{#EACH_ROLES}}
    - {{ROLE}}
    {{/EACH_ROLES}}
  {{/IF_ALLOWED_ROLES}}
  audit_logging: {{AUDIT_LOGGING}}
{{/IF_SECURITY}} 