package cn.newfeifan.mall.module.trade.utils.push.pojo;

import lombok.Builder;
import lombok.Data;

/**
 * 可选参数类
 */

@Data
@Builder
public class Options {
    /**
     * 离线消息保留时长 (秒)
     * 推送当前用户不在线时，为该用户保留多长时间的离线消息，以便其上线时再次推送。
     * 默认 86400 （1 天），普通用户最长 3 天， VIP 用户最长 10 天。设置为 0 表示不保留离线消息，只有推送当前在线的用户可以收到。
     * 该字段对 iOS 的 Notification 消息无效。
     */
    private int time_to_live;

    /**
     * APNs 是否生产环境
     * 该字段仅对 iOS 的 Notification 有效，如果不指定则为推送生产环境。注意：JPush 服务端 SDK 默认设置为推送 “开发环境”。
     * true：表示推送生产环境。
     * false：表示推送开发环境。
     */
    private boolean apns_production;

    /**
     * 消息类型分类
     * 	极光不对指定的消息类型进行判断或校准，会以开发者自行指定的消息类型适配 Android 厂商通道。不填默认为 0。
     * 0：代表运营消息。
     * 1：代表系统消息。
     * 此字段优先级最高，会覆盖 options.third_party_channel.vivo.classification 设置的值。
     */
    private int classification;

    /**
     * 推送请求下发通道
     * 仅针对配置了厂商用户使用有效
     */
    private ThirdPartyChannel third_party_channel;

    /**
     * 厂商通道类
     * key 只支持 xiaomi、huawei、honor、meizu、oppo、vivo、fcm 类型用户。 key 可以为上述 7 个类型中的其中一个或者多个同时存在，未传递的 key 其对应的厂商下发走默认下发逻辑。
     */
    @Data
    @Builder
    public static class ThirdPartyChannel {
        private Channel huawei;
        private Channel xiaomi;
        private Channel honor;
        private Channel oppo;
        private Channel vivo;
    }

    @Data
    @Builder
    public static class Channel{
        /**
         * 华为、荣耀通知栏消息智能分类
         * LOW：一般消息。
         * NORMAL：重要消息。
         * HIGH：非常重要消息（仅华为支持）。
         */
        private String importance;
        /**
         * 华为、vivo 厂商消息场景标识
         * 华为的参数值参考文档: <a href="https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/message-classification-0000001149358835#section1085395991513">...</a>
         */
        private String category;

        /**
         * 小米推送平台登记的 channel id
         * OPPO 官网登记的通道 ID
         */
        private String channel_id;

        /**
         * 通知栏消息下发逻辑
         * first_ospush（VIP）：成功注册厂商通道的设备走厂商通道，仅注册极光通道的设备走极光通道。
         * ospush（VIP）：表示推送强制走厂商通道下发。 需要特别注意，只要指定此值的厂商对应配额不够时，推送请求会失败，返回 1012 错误码。
         * 举例：假设指定一个小米用户的 RegistrationID 推送，请求时针对小米、OPPO 等厂商通道都指定了“ospush”，且 OPPO 厂商通道都配额已经用完，则推送同样会返回 1012 错误，提示厂商配额不足。
         * jpush：表示推送强制走极光通道下发。
         * secondary_push：表示推送优先走极光，极光不在线再走厂商，厂商作为辅助（建议此种方式）。
         */
        private String distribution;
    }
}