package com.fs.sop.vo;

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

import java.io.Serializable;
import java.util.Date;

/**
 * SOP生成失败日志VO
 * 用于前端展示，包含客户名称等扩展信息
 */
@Data
public class SopGenerationFailedLogVO implements Serializable {
    
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    private Long id;

    /**
     * SOP ID
     */
    private String sopId;

    /**
     * SOP名称
     */
    private String sopName;

    /**
     * 营期ID
     */
    private String userLogsId;

    /**
     * 营期开始时间
     */
    private String startTime;

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

    /**
     * 客户名称
     */
    private String externalUserName;

    /**
     * 企微用户ID
     */
    private String externalUserId;

    /**
     * 小程序用户ID
     */
    private Long fsUserId;

    /**
     * 企微员工ID（发送人）
     */
    private String qwUserId;

    /**
     * 企微员工名称（发送人）
     */
    private String qwUserName;

    /**
     * 公司员工ID
     */
    private String companyUserId;

    /**
     * 公司ID
     */
    private String companyId;

    /**
     * 企微主体ID
     */
    private String corpId;

    /**
     * 失败类型: 1-未注册 2-E级客户 3-数据缺失 4-营期超期 5-其他
     */
    private Integer failType;

    /**
     * 失败类型名称
     */
    private String failTypeName;

    /**
     * 失败原因
     */
    private String failReason;

    /**
     * 是否已补发: 0-未补发 1-已补发
     */
    private Integer isRetry;

    /**
     * 补发状态名称
     */
    private String retryStatusName;

    /**
     * 补发时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date retryTime;

    /**
     * 补发人
     */
    private String retryBy;

    /**
     * 第几天
     */
    private Long dayNum;

    /**
     * 原计划发送时间
     */
    private String sendTime;

    /**
     * 模板时间点
     */
    private String elementTime;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 获取失败类型名称
     */
    public String getFailTypeName() {
        if (failType == null) {
            return "未知";
        }
        switch (failType) {
            case 1: return "未注册小程序";
            case 2: return "E级客户过滤";
            case 3: return "数据缺失";
            case 4: return "营期超期";
            case 5: return "其他原因";
            default: return "未知";
        }
    }

    /**
     * 获取补发状态名称
     */
    public String getRetryStatusName() {
        if (isRetry == null) {
            return "未补发";
        }
        return isRetry == 1 ? "已补发" : "未补发";
    }
}
