package cn.axzo.workflow.common.model.request.bpmn.process;

import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;

/**
 * 创建审批流程前的入参模型
 *
 * @author wangli
 * @since 2025-01-15 10:21
 */
@ApiModel("创建流程实例前的入参模型")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class BeforeProcessInstanceCreateDTO {
    /**
     * 流程定义的标识
     * <p>
     * [对应 OMS 系统中审批业务的业务 ID]
     */
    @ApiModelProperty(value = "业务 ID")
    @NotEmpty(message = "流程定义的标识不能为空")
    private String processDefinitionKey;

    /**
     * 发起流程实例归属租户 ID
     * <p>
     * 为空时,默认是编辑公共流程模型, 如果是代运营创建,则必填
     * <h1 color=red>建议都传值，在安心筑中对应工作台 ID</h1>
     */
    @ApiModelProperty(value = "发起的审批是属于哪个租户")
    @NotBlank(message = "工作台 ID 不能为空")
    private String tenantId;

    /**
     * 组织关系
     * <p>
     * 用于流程引擎计算对应节点的审批人, 例如第一个审批节点配置的是劳务分包的岗位,第二个审批节点配置的专业分包的角色,
     * 那么, 组织关系就需要传入劳务分包的信息以及专业分包的信息,如果还有更多的审批节点配置,以此类推.
     * 同时，该属性还会用于计算抄送人，以及消息通知的目标接收人
     */
    @ApiModelProperty(value = "组织关系")
    private CooperationOrgDTO cooperationOrg;

    @ApiModelProperty(value = "发起人信息")
    @Valid
    private BpmnTaskDelegateAssigner initiator;

    /**
     * 最后响应的结果中，过滤出需要的类型
     */
    @ApiModelProperty(value = "流程节点过滤类型")
    private List<BpmnFlowNodeType> filter;
}
