package com.miaxis.feign.service;

import com.alibaba.fastjson.JSONObject;
import com.miaxis.common.config.FeignConfig;
import com.miaxis.feign.dto.WxMessageCusom;
import com.miaxis.feign.dto.WxMessageTemplate;
import com.miaxis.feign.dto.WxQrTicket;
import feign.Headers;

import feign.Param;
import feign.form.FormData;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;


/**
 * 微信公众号接口
 * @author wwl
 * @version 1.0
 * @date 2021/10/20 14:59
 */
@FeignClient(name="wxSendService",
        url = "https://api.weixin.qq.com/cgi-bin",configuration = FeignConfig.class)
public interface IWxSendService {


    /**
     *  获取token
     * @param grant_type
     * @param appid 第三方用户唯一凭证
     * @param secret 第三方用户唯一凭证密钥，即appsecret
     * @return
     */
    @GetMapping(value = "/token")
    String getAccessToken(@RequestParam("grant_type") String grant_type,
                          @RequestParam("appid") String appid,
                          @RequestParam("secret") String secret);


    /**
     * 生成带参数二维码接口
     *      -文档链接：https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html
     * @param accessToken
     * @param wxQrTicket:二维码参数
     * @return
     */
    @PostMapping(value = "/qrcode/create")
    String generateTicket(@RequestParam("access_token")String accessToken, WxQrTicket wxQrTicket);


    /**
     * 创建菜单接口
     *      -文档链接：https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html
     * @param accessToken
     * @param jsonObject json
     * @return
     */
    @PostMapping(value = "/menu/create")
    @ResponseBody
    String createMenu(@RequestParam("access_token")String accessToken, JSONObject jsonObject);


    /**
     * 新增永久图文素材
     *      -文档链接：https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Adding_Permanent_Assets.html
     * @param accessToken
     * @param jsonObject json
     * @return
     */
    @PostMapping(value = "/material/add_news")
    @ResponseBody
    String materialAddNews(@RequestParam("access_token")String accessToken, JSONObject jsonObject);


    /**
     * 新增其他类型永久素材
     *      -文档链接：https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Adding_Permanent_Assets.html
     * @param accessToken
     * @param type 媒体文件类型，分别有图片（image）、语音（voice）、视频（video）和缩略图（thumb）
     * @param media form-data中媒体文件标识，有filename、filelength、content-type等信息
     * @return
     */
    @PostMapping(value = "/material/add_material")
    @Headers("Content-Type: multipart/form-data")
    String materialAddByType(@RequestParam("access_token")String accessToken, @RequestParam("type")String type, @Param("photo") FormData media);


    /**
     * 获取用户信息
     * @param token 调用接口凭证
     * @param openid 普通用户的标识，对当前公众号唯一
     * @param lang 返回国家地区语言版本，zh_CN 简体，zh_TW 繁体，en 英语
     * @return
     */
    @GetMapping(value = "/user/info")
    String userInfo(@RequestParam("access_token") String token,
                    @RequestParam("openid") String openid,
                    @RequestParam("lang") String lang);

    /**
     * 发送客服消息
     * @param accessToken
     * @param messageCusom
     * @return
     */
    @PostMapping(value = "/message/custom/send")
    String messageCustomSend(@RequestParam("access_token")String accessToken,
                             WxMessageCusom messageCusom);

    /**
     * 发送模板消息
     * @param accessToken
     * @param messageTemplate
     * @return
     */
    @PostMapping(value = "/message/template/send")
    String messageTemplateSend(@RequestParam("access_token")String accessToken,
                          WxMessageTemplate messageTemplate);



}
