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

import cn.axzo.workflow.common.enums.ApprovalMethodEnum;
import cn.axzo.workflow.common.enums.BpmnFlowNodeMode;
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.common.model.request.bpmn.BpmnButtonConf;
import cn.axzo.workflow.common.model.request.bpmn.BpmnUpgradeApprovalConf;
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.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

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

/**
 * 流程任务日志模型
 *
 * @author wangli
 * @since 2024-09-07 17:08
 */
@ApiModel("流程任务日志模型")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BpmnTaskInstanceLogVO {

    /**
     * 审批任务 ID
     */
    @ApiModelProperty(value = "审批任务 ID")
    private String taskId;
    /**
     * 审批任务节点定义KEY
     */
    @ApiModelProperty(value = "审批任务节点定义KEY")
    private String taskDefinitionKey;
    /**
     * 审批任务节点名称
     */
    @ApiModelProperty(value = "审批任务节点名称")
    private String name;
    /**
     * 任务创建时间
     */
    @ApiModelProperty(value = "任务创建时间")
    private Date createTime;
    /**
     * 任务结束时间
     */
    @ApiModelProperty(value = "任务结束时间")
    private Date endTime;
    /**
     * 审批方式
     */
    @ApiModelProperty(value = "审批方式")
    private ApprovalMethodEnum approvalMethod;
    /**
     * 节点类型
     */
    @ApiModelProperty(value = "节点类型")
    private BpmnFlowNodeType nodeType;
    /**
     * 审批任务节点的类型
     */
    @ApiModelProperty(value = "审批任务节点的类型")
    private BpmnFlowNodeMode nodeMode;
    /**
     * 任务状态
     */
    @ApiModelProperty(value = "任务状态")
    private BpmnProcessInstanceResultEnum result;

    /**
     * 操作描述
     */
    @ApiModelProperty(value = "操作描述")
    private String operationDesc;
    /**
     * 审批建议
     */
    @ApiModelProperty(value = "审批建议")
    private String advice;
    /**
     * 一些扩展信息
     */
    @ApiModelProperty(value = "一些扩展信息")
    private String commentExt;
    /**
     * 图片列表
     */
    @ApiModelProperty(value = "图片列表")
    private List<AttachmentDTO> imageList;
    /**
     * 附件列表
     */
    @ApiModelProperty(value = "附件列表")
    private List<AttachmentDTO> fileList;
    /**
     * 手写签名地址
     */
    @ApiModelProperty(value = "手写签名地址")
    private String signatureUrl;

    /**
     * 电子签名开关
     */
    @ApiModelProperty(value = "电子签名开关")
    private Boolean signature;
    /**
     * 审批人快照信息
     */
    @ApiModelProperty(value = "审批人快照信息")
    private BpmnTaskDelegateAssigner assigneeSnapshot;
    /**
     * 未完成节点多实例模式的审批人信息
     */
    @ApiModelProperty(value = "未完成节点多实例模式的审批人信息")
    private List<BpmnTaskDelegateAssigner> forecastAssignees;

    /**
     * 提级审批配置
     */
    @ApiModelProperty(value = "提级审批配置")
    private BpmnUpgradeApprovalConf upgradeApprovalConf;

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

    public boolean isVirtual() {
        return StringUtils.isBlank(this.taskId);
    }
}
