package cn.facade.util;

import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.http.Constants;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.style.AbstractNotifyStyle;
import com.gexin.rp.sdk.template.style.Style0;
import com.gexin.rp.sdk.template.style.Style6;

/**
 * import com.gexin.rp.sdk.base.IPushResult;
 * UniPush推送
 */
public class UniAppPush {

    // STEP1：获取应用基本信息
    private static final String APP_ID = "75FeUon3vsAyHbAavbt4m9";
    private static final String APP_KEY = "UMNPj9RcBp6UguAacZTCN2";
    private static final String MASTER_SECRET = "5s2vEYXKFcA2BMuI5pg44A";
    private static final String URL = "http://api.getui.com/apiex.htm";

    public static void main(String[] args) {
       // pushMessageToSingle("75c658f8729e63a02cbddc0cb2b53bab", "新报单", "内容");
    }

    /**
     * 消息推送
     *
     * @param clientId 客户端ID
     * @param title    标题
     * @param text     内容
     */
    public static void pushMessageToSingle(String clientId, String title, String text)
    {
        // 设置后，根据别名推送，会返回每个cid的推送结果
        /**/
        System.setProperty(Constants.GEXIN_PUSH_SINGLE_ALIAS_DETAIL, "true");
        
       // IPushResult ret = null;
        IGtPush push = null;
        SingleMessage message = new SingleMessage();
        Target target = new Target();
        try {
            push = new IGtPush(URL, APP_KEY, MASTER_SECRET);
            NotificationTemplate template = getNotificationTemplate(title, text);
            message.setOffline(true);
            // 离线有效时间，单位为毫秒
            message.setOfflineExpireTime(24 * 3600 * 1000);
            message.setData(template);
            // 可选，1为wifi，0为不限制网络环境。根据手机处于的网络情况，决定是否下发
            message.setPushNetWorkType(0);
            // 厂商通道下发策略
            message.setStrategyJson("{\"default\":4,\"ios\":4,\"st\":4}");
            target.setAppId(APP_ID);
            target.setClientId(clientId);
            //target.setAlias(Alias);
            //ret = push.pushMessageToSingle(message, target);
            push.pushMessageToSingle(message, target);
        } catch (Exception e) {
            e.printStackTrace();
            assert push != null;
            //ret =push.pushMessageToSingle(message, target, e.getMessage());
            push.pushMessageToSingle(message, target, e.getMessage());
        } 
    }
    
    public static NotificationTemplate getNotificationTemplate(String title, String text) 
    {
        NotificationTemplate template = new NotificationTemplate();
        // 设置APPID与APPKEY
        template.setAppId(APP_ID);
        template.setAppkey(APP_KEY);
        AbstractNotifyStyle style = getStyle0(title, text);
        template.setStyle(style);
        template.setTransmissionType(1);  // 透传消息接受方式设置，1：立即启动APP，2：客户端收到消息后需要自行处理
        template.setTransmissionContent("请输入您要透传的内容");
        //template.setAPNInfo(getAPNPayload()); //详见【推送模板说明】iOS通知样式设置
        return template;
    }

    /**
     * Style0 系统样式
     *
     * @return
     * @link http://docs.getui.com/getui/server/java/template/ 查看效果
     */
    public static AbstractNotifyStyle getStyle0(String title, String text) {
        Style0 style = new Style0();
        // 设置通知栏标题与内容
        style.setTitle(title);
        style.setText(text);
        // 配置通知栏图标
        style.setLogo("icon.png"); //配置通知栏图标，需要在客户端开发时嵌入，默认为push.png
        // 配置通知栏网络图标
        style.setLogoUrl("");
        // 配置自定义铃声(文件名，不需要后缀名)，需要在客户端开发时嵌入后缀名为.ogg的铃声文件
        style.setRingName("sound");
        // 角标, 必须大于0, 个推通道下发有效; 此属性目前仅针对华为 EMUI 4.1 及以上设备有效
        style.setBadgeAddNum(1);

        // 设置通知是否响铃，震动，或者可清除
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
        style.setChannel("通知渠道id");
        style.setChannelName("通知渠道名称");
        style.setChannelLevel(3); //设置通知渠道重要性
        return style;
    }

    /**
     * Style6 展开式通知样式
     *
     * @return
     * @link http://docs.getui.com/getui/server/java/template/ 查看效果
     */
    public static AbstractNotifyStyle getStyle6(String title, String text, String bigImageUrl, String bigText) {
        Style6 style = new Style6();
        // 设置通知栏标题与内容
        style.setTitle(title);
        style.setText(text);
        // 配置通知栏图标
        style.setLogo("icon.png"); //配置通知栏图标，需要在客户端开发时嵌入
        // 配置通知栏网络图标
        style.setLogoUrl("");
        // 三种方式选一种
        if (bigImageUrl != null) {
            style.setBigStyle1(bigImageUrl); //设置大图+文本样式
        } else {
            style.setBigStyle2(bigText); //设置长文本+文本样式
        }
        // 配置自定义铃声(文件名，不需要后缀名)，需要在客户端开发时嵌入后缀名为.ogg的铃声文件
        style.setRingName("sound");
        // 角标, 必须大于0, 个推通道下发有效; 此属性目前仅针对华为 EMUI 4.1 及以上设备有效
        style.setBadgeAddNum(1);
        // 设置通知是否响铃，震动，或者可清除
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
        style.setChannel("通知渠道id");
        style.setChannelName("通知渠道名称");
        style.setChannelLevel(3); //设置通知渠道重要性
        return style;
    }
}
