package com.fs.company.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * 工作流执行记录VO
 * 用于前端展示每个人的执行记录
 *
 * @author MixLiu
 * @date 2026/1/29
 */
@Data
public class WorkflowExecRecordVo {

    /**
     * 业务ID (company_voice_robotic_business.id)
     */
    private Long businessId;

    /**
     * 任务ID
     */
    private Long roboticId;

    /**
     * 外呼ID
     */
    private Long calleeId;

    /**
     * 客户ID
     */
    private Long customerId;

    /**
     * 客户姓名
     */
    private String customerName;

    /**
     * 客户手机号
     */
    private String customerPhone;

    /**
     * 加微客户ID
     */
    private Long wxClientId;

    /**
     * 工作流实例ID
     */
    private String workflowInstanceId;

    /**
     * 工作流状态 (1:成功 2:失败 3:执行中 4:暂停 5:等待 6:取消 7:超时)
     */
    private Integer workflowStatus;

    /**
     * 工作流状态名称
     */
    private String workflowStatusName;

    /**
     * 当前节点Key
     */
    private String currentNodeKey;

    /**
     * 当前节点名称
     */
    private String currentNodeName;

    /**
     * 当前节点类型
     */
    private Integer currentNodeType;

    /**
     * 当前节点类型名称
     */
    private String currentNodeTypeName;

    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;

    /**
     * 最后更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastUpdateTime;

    /**
     * 加微完成次数
     */
    private Integer addWxDone;

    /**
     * 打电话完成次数
     */
    private Integer callPhoneDone;

    /**
     * 发短信完成次数
     */
    private Integer sendMsgDone;

    /**
     * 节点执行日志列表
     */
    private List<NodeExecLogVo> nodeLogs;

    /**
     * 是否在外呼节点等待
     */
    private Boolean waitCallNode;

    /**
     * 节点执行日志VO
     */
    @Data
    public static class NodeExecLogVo {
        /**
         * 日志ID
         */
        private Long id;

        /**
         * 节点Key
         */
        private String nodeKey;

        /**
         * 节点名称
         */
        private String nodeName;

        /**
         * 节点类型
         */
        private Integer nodeType;

        /**
         * 节点类型名称
         */
        private String nodeTypeName;

        /**
         * 状态
         */
        private Integer status;

        /**
         * 状态名称
         */
        private String statusName;

        /**
         * 开始时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date startTime;

        /**
         * 结束时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date endTime;

        /**
         * 执行时长(毫秒)
         */
        private Long duration;

        /**
         * 错误信息
         */
        private String errorMessage;

        /**
         * 输出数据
         */
        private String outputData;
    }
}
