package com.brframework.commonapppush.service;

import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.brframework.commonapppush.exception.AppPushException;
import com.brframework.commonapppush.vo.*;

/**
 * 推送
 * @author xu
 * @date 2019/11/18 19:22
 */
public interface AppPushService {

    /**
     * 用户消息推送通知
     * @param userTokens  推送的用户
     * @param title         推送的标题
     * @param text          推送的内容
     * @param uri           点击推送的跳转内容(android有效)
     * @param description   推送的描述
     * @return
     */
    void sendUnicastNotification(String userTokens, String title, String text, String uri, String description);

    /**
     * 广播消息推送通知
     * @param title          推送的标题
     * @param text           推送的内容
     * @param uri            点击推送的跳转内容(android有效)
     * @param description    推送的描述
     * @return
     */
    void sendBroadcastNotification(String title, String text, String uri, String description);

    /**
     * android群推
     * @param title
     * @param text
     * @param uri
     * @param description
     * @return
     */
    String sendBroadcastNotificationForAndroid(String title, String text, String uri, String description);

    /**
     * ios群推
     * @param title
     * @param text
     * @param description
     * @return
     */
    String sendBroadcastNotificationForIOS(String title, String text, String description);


    /**
     * IOS单推
     * @param deviceTokens
     * @param title
     * @param text
     * @param description
     * @return
     */
    String sendUnicastNotificationForIOS(String deviceTokens, String title, String text, String description);

    /**
     * android单推
     * @param deviceTokens
     * @param title
     * @param text
     * @param uri
     * @param description
     * @return
     */
    String sendUnicastNotificationForAndroid(String deviceTokens, String title, String text, String uri, String description);


    /**
     * 推送请求
     * @param requestBody
     * @return
     */
    String request(Object requestBody, String os);

    /**
     * 签名
     * @param requestMethod
     * @param url
     * @param body
     * @param appMasterSecret
     * @return
     */
    String umsign(Method requestMethod, String url, String body, String appMasterSecret);

}
