package com.qunzhixinxi.hnqz.admin.service;

import com.qunzhixinxi.hnqz.admin.entity.SysWxReplyMessage;
import com.qunzhixinxi.hnqz.admin.entity.SysWxReplyMessagePostBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 微信账号相关
 *
 * @author lixuesong
 * @date 2021年04月28日 15:21
 */
public interface SysWxAccountApiService {

	/**
	 * 获取微信access_token
	 *
	 * @param appid 第三方用户唯一凭证
	 * @param secret 第三方用户唯一凭证密钥，即appsecret
	 * @return
	 */
	String getAccessToken(String appid, String secret);

	/**
	 * 获取微信素材
	 *
	 * @param mediaId 要获取的素材的media_id
	 * @return
	 */
	Map<String, Object> getMaterial(String mediaId);

	/**
	 * 验证微信服务器
	 *
	 * @param signature
	 * @param timestamp
	 * @param nonce
	 * @return
	 */
	boolean verifyWxServer(String signature, String timestamp, String nonce);

	/**
	 * 解密微信返回的报文
	 *
	 * @param msgSignature
	 * @param timestamp
	 * @param nonce
	 * @param postData
	 * @return
	 */
	SysWxReplyMessagePostBody decryptWxMessage(String msgSignature, String timestamp, String nonce, String postData) throws Exception;

	/**
	 * 拼接选择列表信息
	 *
	 * @param messageList
	 * @return
	 */
	String joinWxSelectListMessage(List<SysWxReplyMessage> messageList);

	/**
	 * 加密选择列表信息
	 *
	 * @param messagePostBody
	 * @param selectContent
	 * @return
	 * @throws Exception
	 */
	String encryptWxSelectListMessage(SysWxReplyMessagePostBody messagePostBody, String selectContent) throws Exception;

	/**
	 * 加密文本信息
	 *
	 * @param messagePostBody
	 * @param message
	 * @return
	 * @throws Exception
	 */
	String encryptWxTextMessage(SysWxReplyMessagePostBody messagePostBody, SysWxReplyMessage message) throws Exception;

	/**
	 * 加密图片信息
	 *
	 * @param messagePostBody
	 * @param message
	 * @return
	 * @throws Exception
	 */
	String encryptWxImageMessage(SysWxReplyMessagePostBody messagePostBody, SysWxReplyMessage message) throws Exception;

	/**
	 * 加密视频信息
	 *
	 * @param messagePostBody
	 * @param message
	 * @return
	 * @throws Exception
	 */
	String encryptWxVideoMessage(SysWxReplyMessagePostBody messagePostBody, SysWxReplyMessage message) throws Exception;

	/**
	 * 上传微信素材
	 *
	 * @param file
	 * @param mediaType
	 * @param title
	 * @param introduction
	 * @return
	 */
	Map<String, String> uploadMedia(MultipartFile file, Integer mediaType, String title, String introduction) throws Exception;

	/**
	 * 发送客服消息
	 *
	 * @param toUser
	 * @param content
	 * @return
	 */
	boolean sendCustomMessage(String toUser, String msgType, String content);

	/**
	 * 发送图文消息
	 *
	 * @param toUser
	 * @param message
	 * @return
	 */
	boolean sendWxNewsMessage(String toUser, SysWxReplyMessage message) throws Exception;

	/**
	 * 分割文本内容为多个
	 *
	 * @param selectContent
	 * @param limitTextLength
	 * @throws IOException
	 * @return
	 */
	SysWxReplyMessage splitContentByLine(String selectContent, Integer limitTextLength) throws IOException;

}
