package cn.axzo.msg.center.service.template.request;

import cn.axzo.msg.center.service.domain.card.AppVersionConfig;
import cn.axzo.msg.center.service.domain.card.StateImageConfig;
import cn.axzo.msg.center.service.dto.MessageTemplateButtonV3DTO;
import cn.axzo.msg.center.service.dto.MessageTemplateCardJumpV3DTO;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.MessageChannel;
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
import cn.axzo.msg.center.service.pending.card.domain.CardElementConfig;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * @description
 *
 * @author cold_blade
 * @date 2023/10/11
 * @version 1.0
 */
@Setter
@Getter
public class MessageTemplateV3UpdateRequest implements Serializable {

    private static final long serialVersionUID = -2894419272913799317L;

    /**
     * 操作者的自然人id
     */
    private Long operatorId;
    /**
     * 操作人人姓名
     */
    private String operatorName;
    /**
     * 模板编码
     */
    @NotBlank(message = "模板编码不能为空")
    private String templateCode;
    /**
     * 模板名称
     */
    @NotBlank(message = "模板名称不能为空")
    private String templateName;

    /**
     * 消息类型
     *   NOTIFICATION: 通知
     *   PENDING: 待办
     */
    private MessageGroupCategoryEnum category;

    /**
     * 消息类型
     *   BIZ_PENDING_MESSAGE: 业务待办
     *   APPROVAL_PENDING_MESSAGE: 审批待办
     */
    private MessageCategoryEnum subCategory;

    /**
     * 消息分类树的叶结点的结点编码列表
     */
    private List<String> leafGroupNodes;
    /**
     * 推送终端配置
     *   B_ENTERPRISE_APP: B-安心筑企业版
     *   C_WORKER_APP: C-安心筑工人版
     */
    private List<PushTerminalEnum> pushTerminals;
    /**
     * 该模板最低支持的APP版本号
     */
    private String minAppVersion;
    /**
     * 消息标题
     */
    @NotBlank(message = "消息标题不能为空")
    private String msgTitle;
    /**
     * 消息内容
     */
    @NotBlank(message = "消息内容不能为空")
    private String msgContent;
    /**
     * 消息图标
     */
    private String msgIcon;
    /**
     * 卡片分组
     */
    private List<MessageTemplateGroupV3CreateRequest> groups;
    /**
     * 卡片跳转
     */
    private MessageTemplateCardJumpV3DTO cardJump;
    /**
     * 按钮列表
     */
    private List<MessageTemplateButtonV3DTO> buttons;
    /**
     * 待办样式, BIZ_COMMON: 业务待办能用, FLOW_COMMON: 审批待办能用, 其它动态配置的
     */
    private String detailStyleCode;


    private JSONObject pushData;

    /**
     * 推送终端/最低版本
     */
    private List<AppVersionConfig> appVersionConfigs;

    /**
     * 消息通道:IM/待办
     */
    private List<MessageChannel> channels;

    /**
     * 卡片样式编码
     */
    private String cardStyleCode;

    /**
     * 卡片样式扩展字段
     */
    private List<CardElementConfig> cardExtFields;

    /**
     * 配置状态戳
     */
    private List<StateImageConfig> stateImageConfigs;

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