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

import cn.axzo.msg.center.domain.persistence.BaseEntity;
import cn.axzo.msg.center.service.enums.GeneralMessageStateEnum;
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
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.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.io.Serializable;

/**
 * @description
 *   普通消息记录表数据模型
 * @author cold_blade
 * @date 2023/9/20
 * @version 1.0
 */
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "general_message_record", autoResultMap = true)
public class GeneralMessageRecord extends BaseEntity<GeneralMessageRecord> implements Serializable {

    private static final long serialVersionUID = -1271402884501451185L;

    /**
     * 消息的唯一标识
     */
    private String identityCode;
    /**
     * 发送者自然人 ID
     */
    private Long senderPersonId;
    /**
     * 发送者身份ID
     */
    private Long senderId;
    /**
     * 发送者身份类型
     */
    private IdentityTypeEnum senderType;
    /**
     * 接收者自然人 ID
     */
    private Long receiverPersonId;
    /**
     * 接收者身份ID
     */
    private Long receiverId;
    /**
     * 接收者身份类型
     */
    private IdentityTypeEnum receiverType;
    /**
     * 模板编码
     */
    private String templateCode;
    /**
     * 消息标题
     */
    private String title;
    /**
     * 消息内容
     */
    private String content;
    /**
     * 消息所属组织类型
     */
    private OrganizationTypeEnum orgType;
    /**
     * 消息所属组织Id
     */
    private Long orgId;
    /**
     * 消息所属组织名称
     */
    private String orgName;
    /**
     * 消息状态
     */
    private GeneralMessageStateEnum state;
    /**
     * 关联业务主键
     */
    private String bizCode;
    /**
     * 路由参数（留存）
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject routerParams;
    /**
     * 业务扩展参数
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject bizExtParams;
    /**
     * 推送重试次数
     */
    private Integer retryCount;
    /**
     * 推送最终失败原因
     */
    private String failCause;

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