package com.fs.wxwork.service;

import com.fs.wxwork.dto.*;

import java.util.List;

/**
 * 企业微信服务类
 */
public interface WxWorkService {

    /**
     * 初始化企业微信
     * @param param 参数
     * @return QwWorkResponseDTO<QwInitRespDTO>
     */
    WxWorkResponseDTO<WxWorkInitRespDTO> init(WxWorkInitDTO param,Long serverId);

    /**
     * 设置回调地址
     * @param param 参数
     * @return QwWorkResponseDTO
     */
    WxWorkResponseDTO SetCallbackUrl(WxWorkSetCallbackUrlDTO param,Long serverId);

    /**
     * 发送文本消息
     * @param param 参数
     * @return QwWorkResponseDTO
     */
    WxWorkResponseDTO<WxWorkSendTextMsgRespDTO> SendTextMsg(WxWorkSendTextMsgDTO param,Long serverId);


    /**
     * 发送小程序
     * @param param 参数
     * @return QwWorkResponseDTO
     */
    WxWorkResponseDTO<WxWorkSendAppMsgRespDTO> SendAppMsg(WxWorkSendAppMsgDTO param,Long serverId);

    /**
     * 发送链接消息
     * @param param 参数
     * @return QwWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendLinkMsgRespDTO> SendLinkMsg(WxwSendLinkMsgDTO param,Long serverId);
    /**
     * 获取企业微信二维码
     * @param param 参数
     * @return QwWorkResponseDTO
     */
    WxWorkResponseDTO<WxWorkGetQrCodeRespDTO> getQrCode(WxWorkGetQrCodeDTO param,Long serverId);

    /**
     * 获取外部联系人列表
     * @param param 参数
     * @return WxWorkResponseDTO<List<WxwGetExternalContactRespDTO>>
     */
    WxWorkResponseDTO<List<WxwGetExternalContactRespDTO>> getExternalContacts(WxwGetExternalContactsDTO param,Long serverId);

    /**
     * 输入验证码设置
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO CheckCode(WxWorkCheckCodeDTO param,Long serverId);

    /**
     * 获取二次验证二维码接口
     * @param param 参数
     * @return WxWorkResponseDTO<SecondaryValidationRespDTO>
     */
    WxWorkResponseDTO<WxwSecondaryValidationRespDTO> SecondaryValidation(WxWorkGetQrCodeDTO param,Long serverId);

    /**
     * 自动登录
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO automaticLogin(WxWorkGetQrCodeDTO param,Long serverId);

    /**
     * 登出
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwLoginOutRespDTO> LoginOut(WxWorkGetQrCodeDTO param,Long serverId);


    /**
     * 读取消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwMarkAsReadRespDTO> MarkAsRead(WxwMarkAsReadDTO param,Long serverId);

    /**
     * 群发消息（每天每人一次）
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendGroupsMsgRespDTO> SendGroupsMsg(WxwSendGroupsMsgDTO param,Long serverId);


    /**
     * 获取运行中的实例
     *
     * @return WxWorkResponseDTO<WxwGetRunClientRespDTO>
     */
    WxWorkResponseDTO<WxwGetRunClientRespDTO> getRunClient(Long serverId);


    /**
     * 撤回消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO RevokeMsg(WxwRevokeMsgDTO param,Long serverId);

    /**
     * 发送CDN图片消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendCDNImgMsgRespDTO> SendCDNImgMsg(WxwSendCDNImgMsgDTO param,Long serverId);


    /**
     * 发送CDN文件消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendCDNFileMsgRespDTO> SendCDNFileMsg(WxwSendCDNFileMsgDTO param,Long serverId);


    /**
     * 发送CDN语音消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendCDNVoiceMsgRespDTO> SendCDNVoiceMsg(WxwSendCDNVoiceMsgDTO param,Long serverId);


    /**
     * 发送CDN视频消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendCDNVideoMsgRespDTO> SendCDNVideoMsg(WxwSendCDNVideoMsgDTO param,Long serverId);


    /**
     * 发送视频号消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendVideoNumberRespDTO> sendVideoNumber(WxwSendVideoNumberDTO param,Long serverId);


    /**
     * 发送gif表情
     * @param param 参数
     * @return WxWorkResponseDTO<WxwSendEmotionMessageRespDTO>
     */
    WxWorkResponseDTO<WxwSendEmotionMessageRespDTO> SendEmotionMessage(WxwSendEmotionMessageDTO param,Long serverId);

    /**
     * 发送名片消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendBusinessCardMsgRespDTO> SendBusinessCardMsg(WxwSendBusinessCardMsgDTO param,Long serverId);

    /**
     * 发送位置消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendLocationMsgRespDTO> SendLocationMsg(WxwSendLocationMsgDTO param,Long serverId);

    /**
     * 格式化发送@消息
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendTextAtMsgTwoRespDTO> sendTextAtMsgTwo(WxwSendTextAtMsgTwoDTO param,Long serverId);


    /**
     * 同步消息记录
     * <p>同步消息记录，用来同步消息记录，如果电脑微信在离线期间，手机端进行了消息操作，调用这个接口可以把离线期间的消息同步过来。</p>
     * <p>使用场景，登录成功的时候使用，然后就不需要用到它了，如果对消息没那么重要则不需要用它</p>
     * @param param 参数
     * @return WxWorkResponseDTO<WxwSyncAllDataRespDTO>
     */
    WxWorkResponseDTO<WxwSyncAllDataRespDTO> syncAllData(WxwSyncAllDataDTO param,Long serverId);

    /**
     * 发送大视频文件
     * @param param 参数
     * @return WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxwSendCDNBigVideoMsgRespDTO> SendCDNBigVideoMsg(WxwSendCDNBigVideoMsgDTO param,Long serverId);

    String getCorpId(String uuid, Long corpId,Long serverId);

     WxWorkResponseDTO<List<WxWorkVid2UserIdRespDTO>> UserId2Vid(WxWorkUserId2VidDTO param,Long serverId);

     WxWorkResponseDTO<List<WxWorkVid2UserIdRespDTO>> Vid2UserId(WxWorkVid2UserIdDTO param,Long serverId);

    WxWorkResponseDTO<WxwSpeechToTextEntityRespDTO>  SpeechToTextEntity(WxwSpeechToTextEntityDTO param, Long serverId);

    WxWorkResponseDTO<WxwUploadCdnLinkFileRespDTO>  uploadCdnLinkFile(WxwUploadCdnLinkFileDTO param, Long serverId);

    WxwSilkVoceDTO  getSilkVoice(String param, Long companyUserId);

    /**
     * 外部联系人图片视频文件下载
     * @param param    参数
     * @param serverId 服务器ID
     * @return  WxWorkResponseDTO
     */
    WxWorkResponseDTO<String> downloadWeChatFile(WxwDownloadWeChatFileDTO param, Long serverId);

    /**
     * CDN下载文件重置版本
     * @param param     参数
     * @param serverId  服务器ID
     * @return  WxWorkResponseDTO
     */
    WxWorkResponseDTO<String> downloadFile(WxDownloadFileDTO param, Long serverId);

    /**
     * CDN上传网络图片
     * @param param     参数
     * @param serverId  服务器ID
     * @return  WxWorkResponseDTO
     */
    WxWorkResponseDTO<WxCdnUploadImgLinkResp> cdnUploadImgLink(WxCdnUploadImgLinkDTO param, Long serverId);
}
