package com.cmvr.test.flow.builder;

import com.cmvr.test.enums.BranchConditionOpEnum;
import lombok.Data;

import java.util.List;

/**
 * 分支条件组
 */
import lombok.Data;
import java.util.List;

/**
 * 分支条件组：代表一个锚点（anchorId）对应的一组条件表达式
 */
@Data
public class FlowBranchConditionGroup {

    /** 分支条件块ID，对应锚点ID */
    private String id;

    /** 表达式之间的逻辑关系，支持 "and" 或 "or" */
    private String withOr;

    /** 条件表达式列表 */
    private List<ConditionExpression> expressions;

    /**
     * 条件表达式结构：描述一个判断条件
     */
    @Data
    public static class ConditionExpression {

        /** 参数名来源类型，"input" 表示 name 是固定值，"quote" 表示从 nameQuotePath 中引用 */
        private String nameType;

        /** 参数名，如果 nameType 为 "input"，此字段为实际参数名 */
        private String name;

        /** 参数名引用路径（当 nameType 为 "quote" 时），取最后一个元素作为参数名 */
        private List<String> nameQuotePath;

        /** 值来源类型，"input" 表示 input 为固定值，"quote" 表示引用其他节点输出 */
        private String valueType;

        /** 静态比较值（当 valueType 为 "input" 时使用） */
        private String input;

        /** 引用路径（当 valueType 为 "quote" 时使用），支持多层结构，如 ["nodeA", "result", "value"] */
        private List<String> quotePath;

        /** 比较运算符，如等于、不等于、大于等（见 BranchConditionOpEnum） */
        private BranchConditionOpEnum condition;
    }
}

