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

import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.common.enums.WorkspaceType;
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonConf;
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonMetaInfo;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.common.model.response.bpmn.task.BpmnTaskInstanceLogVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

/**
 * 流程实例日志模型
 *
 * @author wangli
 * @since 2024-09-07 17:07
 */
@ApiModel("流程实例日志模型")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BpmnProcessInstanceLogVO {
    /**
     * 流程实例的编号
     */
    @ApiModelProperty(value = "流程实例的编号", example = "1024")
    private String id;

    /**
     * 流程名称
     */
    @ApiModelProperty(value = "流程名称", example = "权限点申请")
    private String name;

    /**
     * 流程分类
     */
    @ApiModelProperty(value = "流程分类", notes = "关联的业务分类", example = "1")
    private String category;

    /**
     * 审核状态
     */
    @ApiModelProperty(value = "审核状态(PROCESSING:审核中,APPROVED:已通过,REJECTED:已拒绝,CANCELLED:已取消)", example = "APPROVED")
    private BpmnProcessInstanceResultEnum result;

    /**
     * 发起时间
     */
    @ApiModelProperty("发起时间")
    private Date startTime;

    /**
     * 结束时间
     */
    @ApiModelProperty("结束时间")
    private Date endTime;

    /**
     * 流程定义 KEY
     */
    @ApiModelProperty("流程定义 KEY")
    private String processDefinitionKey;

    /**
     * 流程定义 ID
     */
    @ApiModelProperty("流程定义 ID")
    private String processDefinitionId;

    /**
     * 业务的唯一标识
     */
    @ApiModelProperty(value = "业务的唯一标识", example = "1", notes = "例如说，请假申请的编号")
    private String businessKey;

    /**
     * 流程最终状态
     */
    @ApiModelProperty("流程最终状态")
    private String businessStatus;

    /**
     * 发起人
     */
    @ApiModelProperty("发起人")
    private BpmnTaskDelegateAssigner initiator;

    /**
     * 当前流程发起租户
     */
    @ApiModelProperty("当前流程发起租户")
    private String tenantId;

    /**
     * 是代运营的流程
     */
    @ApiModelProperty("是代运营的流程")
    private Boolean agented;

    /**
     * 任务信息集合
     */
    @ApiModelProperty("任务信息集合")
    private List<BpmnTaskInstanceLogVO> taskDetails;

    /**
     * 当前实例对应模型的全局兜底按钮配置
     */
    @ApiModelProperty(value = "当前实例对应模型的全局兜底按钮配置")
    private BpmnButtonConf defaultButtonConf;

    /**
     * 指定人访问实例日志时，计算其流程应该有权限操作的按钮
     */
    @ApiModelProperty(value = "指定人访问实例日志时，计算其流程应该有权限操作的按钮", notes = "流程有权限，不代表待办消息中一定能看到按钮")
    private List<BpmnButtonMetaInfo> currentUserButtons;

    /**
     * 需要隐藏的自定义按钮集合
     */
    @ApiModelProperty(value = "需要隐藏的自定义按钮集合")
    private List<BpmnButtonMetaInfo> customHiddenButtons;

    /**
     * 是否支持批量审批
     */
    @ApiModelProperty(value = "是否支持批量审批")
    private Boolean supportBatchOperation;

    /**
     * 审批同意录入手写签名
     */
    @ApiModelProperty(value = "审批同意录入手写签名")
    private Boolean userAgreeSignature;

    /**
     * 数据产生版本
     */
    @ApiModelProperty(value = "数据产生版本")
    private String workflowEngineVersion;

    /**
     * 当前流程对应工作台类型
     */
    @ApiModelProperty(value = "工作台类型")
    private WorkspaceType workspaceType;

    /**
     * 当前审批能否打印
     */
    @ApiModelProperty(value = "能否打印")
    private Boolean catPrint;

    @ApiModelProperty(value = "程序计算按钮使用，非对外使用", hidden = true)
    private transient BpmnButtonConf calculatingButtonConf;
}
