package cn.axzo.msg.center.api.response.v3;

import cn.axzo.msg.center.api.enums.MsgStateV3Enum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @author yanglin
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SearchMessageRespV3 {
    /**
     * 批次号
     */
    private String batchNo;

    /**
     * IM端的消息ID
     */
    private String imMsgId;

    /**
     * 消息唯一标识
     */
    private String identityCode;

    /**
     * 发送自然人ID
     */
    private Long senderPersonId;

    /**
     * 接收自然人ID
     */
    private Long receiverPersonId;

    /**
     * 业务事件映射code
     */
    private String bizEventMappingCode;

    /**
     * 模版code
     */
    private String templateCode;

    /**
     * 消息标题
     */
    private String title;

    /**
     * 消息内容
     */
    private String content;

    /**
     * 消息所属组织类型 PROJECT:项目,ENT:企业,UNKNOWN:未知
     */
    private OrganizationTypeEnum receiverOrgType;

    /**
     * 副标题
     */
    private String subtitle;

    /**
     * 发送者项目部ID
     */
    private Long senderWorkspaceId;

    /**
     * 发送者企业ID
     */
    private Long senderOuId;

    /**
     * 接收者项目部ID
     */
    private Long receiverWorkspaceId;

    /**
     * 接收者企业ID
     */
    private Long receiverOuId;

    /**
     * 消息状态 UNSENT:未发送,SEND_SUCCESS:已发送,SEND_FAILED:发送失败
     */
    private MsgStateV3Enum state;

    /**
     * 关联业务编码
     * <p>业务上的唯一标识, 用于向上回述
     */
    private String bizCode;

    /**
     * 路由参数
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject routerParams;

    /**
     * 业务扩展参数
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject bizExtParams;

    /**
     * 消息的其它信息, 备查
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject msgExtInfo;

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

    /**
     * 发送时间
     */
    @JsonFormat(pattern = "yyyy-MM-hh HH:mm:ss")
    private Date sendTime;
}