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

import cn.axzo.workflow.common.enums.ApprovalMethodEnum;
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.AttachmentDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

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

/**
 * 历史任务实例响应模型
 *
 * @author wangli
 * @since 2023/7/29 17:57
 */
@ApiModel("历史任务实例响应模型")
@Data
public class BpmnHistoricTaskInstanceVO {

    /**
     * 任务实例 ID
     */
    @ApiModelProperty(value = "任务实例 ID")
    private String taskId;

    /**
     * 任务定义 KEY
     */
    @ApiModelProperty(value = "任务定义 KEY")
    private String taskDefinitionKey;

    /**
     * 任务名称
     */
    @ApiModelProperty(value = "任务名称")
    private String name;

    /**
     * 任务关联的实例 ID
     */
    @ApiModelProperty(value = "任务关联的实例 ID")
    private String processInstanceId;

    /**
     * 任务关联的定义 ID
     */
    @ApiModelProperty(value = "任务关联的定义 ID")
    private String processDefinitionId;

    /**
     * 任务的审批人
     */
    @ApiModelProperty(value = "任务的审批人")
    private String assignee;

    /**
     * 任务创建时间
     */
    @ApiModelProperty(value = "任务创建时间")
    private Date createTime;

    /**
     * 任务结束时间
     */
    @ApiModelProperty(value = "任务结束时间")
    private Date endTime;

    /**
     * 任务持续毫秒数
     */
    @ApiModelProperty(value = "任务持续毫秒数")
    private Long durationInMillis;

    /**
     * 租户
     */
    @ApiModelProperty(value = "租户")
    private String tenantId;

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

    /**
     * 任务审批意见
     */
    @ApiModelProperty(value = "任务审批意见")
    private String advice;

    /**
     * 审批意见的扩展信息
     */
    @ApiModelProperty(value = "审批意见的扩展信息")
    private String commentExt;

    /**
     * 当前任务关联评论信息
     */
    @ApiModelProperty(value = "当前任务关联评论信息", notes = "暂时不用", hidden = true)
    @Deprecated
    private List<BpmnHistoricCommentVO> comments;

    /**
     * 任务关联的附件
     */
    @ApiModelProperty(value = "任务关联的附件")
    private List<AttachmentDTO> attachments;

    /**
     * 删除原因
     */
    @ApiModelProperty(value = "删除原因")
    private String deleteReason;

    /**
     * 操作描述
     */
    @ApiModelProperty(value = "操作描述")
    private String operationDesc;

    /**
     * 审批人的快照信息
     */
    @ApiModelProperty(value = "审批人的快照信息", notes = "完整的审批人信息,assignee 仅是唯一标识")
    private BpmnTaskDelegateAssigner assigneeSnapshot;

    /**
     * 抄送人
     * <p>
     * 抄送节点特有,由于该模型最初的设计是一个人对应一个任务, 就算是相同的审批节点也是这个规则.
     * 但是抄送非常特殊, 一个抄送节点, 默认就要对应多人
     */
    @ApiModelProperty(value = "抄送人", notes = "抄送节点特有")
    private List<BpmnTaskDelegateAssigner> forecastAssignees;

    /**
     * 节点本身的类型
     */
    @ApiModelProperty(value = "节点本身的类型")
    private BpmnFlowNodeType nodeType;

    /**
     * 节点本身的审批方式
     */
    @ApiModelProperty(value = "节点本身的审批方式")
    private ApprovalMethodEnum approvalMethod;

}
