package cn.axzo.msg.center.domain.entity;

import cn.axzo.msg.center.api.enums.MsgStateV3Enum;
import cn.axzo.msg.center.domain.persistence.BaseEntityExt;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.Getter;
import lombok.Setter;

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

/**
 * @author cold_blade
 * @version 1.0
 * @description 消息基础模板数据模型
 * @date 2023/9/20
 */
@Setter
@Getter
@TableName("message_record_v3")
public class MessageRecordV3 extends BaseEntityExt<MessageRecordV3> implements Serializable {

    private static final long serialVersionUID = -880409106378455813L;

    /**
     * 批次号
     */
    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:未知
     * <p>这里使用string是为了兼容一些数据库数据没有值的情况
     */
    private String 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;

    /**
     * 发送时间
     */
    private Date sendTime;

    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}