package cn.axzo.msg.center.service.dto;

import cn.axzo.msg.center.service.domain.CardUrlConfig;
import cn.axzo.msg.center.service.enums.CardUrlOpenStrategy;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.StatusEnum;
import cn.axzo.msg.center.service.enums.YesOrNo;
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;

/**
 * @author yanglin
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MessageTemplateV3DTO {

    /**
     * 模板名称
     */
    private String name;

    /**
     * 系统自动生成的模板code
     */
    private String code;

    /**
     * 所属消息类型
     */
    private MessageCategoryEnum msgCategory;

    /**
     * 模板标题
     */
    private String title;

    /**
     * 模板类容
     */
    private String content;

    /**
     * 消息详情样式. BIZ_COMMON: 业务待办能用, FLOW_COMMON: 审批待办能用, 其它动态配置的
     */
    private String detailStyleCode;

    /**
     * 模板icon
     */
    private String icon;

    /**
     * APP最小版本支持，可不配
     */
    private String minAppVersion;

    /**
     * 模板状态
     */
    private StatusEnum status;

    /**
     * 推送终端配置 JSON字串
     */
    private String pushTerminal;

    /**
     * 卡片跳转方式. NONE: 无跳转, OPEN_TODO_DETAIL: 打开待办详情, OPEN_CUSTOM_PAGE: 打开指定页面
     */
    private CardUrlOpenStrategy cardUrlOpenStrategy;

    /**
     * 卡片跳转配置. 在links的基础上再包一层, 避免以后卡片增加自己的配置
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private CardUrlConfig cardUrConfig;

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

    /**
     * push配置
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject pushData;

    /**
     * 是否显示在列表中. YES: 是, NO: 否
     */
    private YesOrNo displayOnList;
}