package com.cmvr.test.flow.builder;

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

import java.util.List;

/**
 * 参数结构
 */
@Data
public class FlowParamDef {

    /**
     * 参数作用域：
     * - INPUT：用于 start 节点的 inputParams
     * - NODE：用于普通节点的 nodeParams（包括 input / quote）
     */
    private ParamScope scope;

    /**
     * 参数名称（如 deviceId / imageUrl 等）
     */
    private String name;

    /**
     * 参数类型：
     * NodeParams时：
     * - input：静态输入
     * - quote：引用上游节点输出
     * -------------------------------
     * InputParams时：
     * - String 字符类型
     * - Boolean 布尔类型
     * - Object  对象（嵌套的children）
     * - Array   数组类型
     * - Number  数值类型
     */
    private String type;

    /**
     * type=input 时填写的静态值
     */
    private String input;

    /**
     * type=quote 时填写的引用路径
     * - 第一个元素是节点 ID
     * - 后面是参数字段路径（支持多层，最多三层）
     * 例：["node-1", "result", "image", "url"]
     */
    private List<String> quote;

    /**
     * 引用的是输出参数还是输入参数
     * outputParams -> output
     * nodeParams   -> input
     */
    private String quoteType;

    /**
     * 参数描述（用于 UI 显示或生成 Schema）
     */
    private String desc;

    /**
     * 是否为必填参数
     */
    private Boolean required;

    /**
     * 子参数定义（用于 array / object 类型的嵌套）
     */
    private List<FlowParamDef> children;
}
