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

import cn.axzo.msg.center.domain.persistence.BaseEntityExt;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.StatusEnum;
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.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.io.Serializable;

/**
 * @description
 *   消息基础模板数据模型
 * @author cold_blade
 * @date 2023/9/20
 * @version 1.0
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "message_base_template", autoResultMap = true)
public class MessageBaseTemplate extends BaseEntityExt<MessageBaseTemplate> implements Serializable {

    private static final long serialVersionUID = -880409106378455813L;

    /**
     * 模板名称
     */
    private String name;
    /**
     * 系统自动生成的模板code
     */
    private String code;
    /**
     *  消息详情样式. BIZ_COMMON: 业务待办能用, FLOW_COMMON: 审批待办能用, 其它动态配置的
     */
    private String detailStyleCode;
    /**
     * 所属消息类型
     */
    private MessageCategoryEnum msgCategory;
    /**
     * 模板标题
     */
    private String title;
    /**
     * 模板类容
     */
    private String content;
    /**
     * 卡片信息,json字串
     */
    private String cardContent;
    /**
     * 模板icon
     */
    private String icon;
    /**
     * 模板状态
     *   ENABLE: 启用
     *   DISABLE: 禁用
     */
    private StatusEnum status;
    /**
     * 推送终端配置 JSON字串
     */
    private String pushTerminal;
    /**
     * APP最小版本支持，可不配
     */
    private String minAppVersion;
    /**
     * 创建者自然人id
     */
    private Long creatorId;
    /**
     * 更新者自然人id
     */
    private Long updaterId;
    /**
     * 创建人id
     */
    private Long createPersonId;
    /**
     * 创建人姓名
     */
    private String createPersonName;
    /**
     * 更新人id
     */
    private Long updatePersonId;
    /**
     * 更新人姓名
     */
    private String updatePersonName;

    /**
     * IM发送优先级
     */
    private Integer imSendPriority;

    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject pushData;

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

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class PushData {

        private boolean switchOn;

        /**
         * 声音文件
         */
        private String voiceFile;

        /**
         * 提醒方式：voice（声音）、vibrate(震动)
         */
        private String ability;

        /**
         * push类型：system（系统消息）、op(运营消息)
         */
        private String type;

        /**
         * 声音类型：custom（自定义）、system（系统
         */
        private String voiceType;
    }
}
