package com.tzy.s.wx.service;

import com.alibaba.fastjson.JSONObject;
import com.tzy.s.wx.dto.Result;
import com.tzy.s.wx.dto.WeixinNewsitemsParam;
import com.tzy.s.wx.dto.WeixinUpdateParam;

import java.util.List;

/**
 * 微信接口api
 */
public interface WeixinApi<T> {
    /**
     * 获取token接口
     * @param appid
     * @param appsecret
     * @return
     */
    public Result getAccessToken(String appid, String appsecret);

    /**
     * 根据code 获取 web 授权token
     * @param appid
     * @param appsecret
     * @param code
     * @return
     */
    public Result<T> getWebToken(String appid,String appsecret,String code);

    /**
     * 获取snspai user info
     * @param token web授权token
     * @param openid
     * @return
     */
    public Result getSnsapiUserInfo(String token , String openid);

    /**
     * 获取用戶信息（unionID機制）
     * @param accesstoken
     * @param openid
     * @return
     */
    public Result getUserinfo(String accesstoken ,String openid);
    /**
     * 創建標籤
     */
    public Result setTag(String accesstoken , String name);
    /**
     * 獲取標籤
     */
    public Result<T> getTag(String accesstoken);
    /**
     * 刪除標籤
     */
    public Result<T> deleteTag(String accesstoken,String id);

    /**
     * 編輯標籤
     * @param accesstoken
     * @param jsonObject
     * @return
     */
    public Result<T>updateTag(String accesstoken, JSONObject jsonObject);


    /**
     * 批量為粉絲打標籤
     * @param openid_list
     * @param tagid
     * @return
     */
    public Result<T>batchTag(String accesstoken ,List<String>openid_list,String tagid);
    /**
     * 批量為用戶取消標籤
     */
    public Result<T>batchuntagging(String accesstoken,List<String>openid_list,String tagid);

    /**
     * 获取图文素材
     * @param token
     * @return
     */
    public Result getNewitems(String token,String mediaId);

    /**
     * 獲取openID列表
     * @param accesstoken
     * @return
     */
    public Result<T>getOpenid(String accesstoken,String next_openid);

    /**
     * 获取图文素材数目
     * @return
     */
    public Result getNewitemsCount(String token);

    /**
     * 獲取粉絲身上的標籤
     * @param accesstoken
     * @param openid
     * @return
     */
    public Result<T>getidList(String accesstoken,String openid );

    /**
     * 获取图文素材列表
     * @param token
     * @param type
     * @param offset
     * @param count
     * @return
     */
    public Result getNewitemsList(String token,String type,Integer offset,Integer count);

    /**
     * 獲取標籤下的粉絲列表
     * @param accesstoken
     * @param tagid
     * @return
     */
    public Result<T>getUserList(String accesstoken,String tagid ,String next_openid);

    /**
     * 获取apiticket或jsapiticket
     * @param token
     * @param type
     * @return
     */
    public Result getTicket(String token, String type);

    /**
     * 新增媒体文件类型的文件（image）、语音（voice）、视频（video）和缩略图（thumb）
     * @param token
     * @param type
     * @param filePath
     * @return
     */
    public Result addMaterial (String filePath, String type, String token)throws Exception;
    /**
     * 上传图文消息内的图片获取URL
     * @param token
     * @param type
     * @param filePath
     * @return
     */
    public Result addPic (String filePath, String token)throws Exception;

    /**
     * 新增媒体文件类型的文件 视频（video）
     * @param token
     * @param filePath
     * @return
     */
    public Result addMaterial (String filePath,String token,String title,String introduction)throws Exception;

    /**
     * 新增圖文素材
     * @param weixinNewsitemsParam
     * @param accesstoken
     * @return
     */
    public Result addNewsitem(WeixinNewsitemsParam weixinNewsitemsParam, String accesstoken);

    /**
     * 刪除永久素材
     * @param accesstoken
     * @param mediaId
     * @return
     */
    public Result deleteNewsitem(String accesstoken,String mediaId);

    /**
     * 更新永久材料
     * @param accesstoken
     * @param weixinUpdateParam
     * @return
     */
    public Result updateNewsitem(String accesstoken,WeixinUpdateParam weixinUpdateParam);

    /**
     * 新增临时素材
     * @param filePath
     * @param token
     * @param type
     * @return
     */
    public Result<T> uploadMedia(String filePath, String token,String type);

    public Result<T> uploadMediaByNetUrl(String fileUrl, String token,String type);

}
