package com.fs.qwApi.service;

import com.alibaba.fastjson.JSONObject;
import com.fs.qw.param.QwUpdateContactWayParam;
import com.fs.qwApi.Result.*;
import com.fs.qwApi.domain.*;
import com.fs.qwApi.param.*;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public interface QwApiService {
    /**
     * 获取客户群列表 ownerFilterList 过滤的群主list,String cursor分页数据游标
     */
    QwGroupChatListResult groupChatList(ArrayList<String> ownerFilterList, String cursor,String corpId);

    /**
     * 获取客户群详情 chatId客户群id
     */
    QwGroupChatDetailsResult groupChatDetails(String chatId,String corpId);

    /**
     * 创建企业-客户群发
     */
    QwAddMsgTemplateResult addMsgTemplate(QwMsgTemplate msgTemplate,String corpId);
    QwAddMsgTemplateResult addMsgTemplateBySop(QwMsgTemplateSop templateSop,String corpId);

    /**
     * 提醒成员群发
     */
    QwResult remindGroupmsgSend(String msgid,String corpId);

    /**
     * 停止企业群发
     */
    QwResult cancelGroupmsgSend(String msgid,String corpId);

    /**
     * 获取群发记录列表
     */
    QwGetGroupmsgListV2Result getGroupmsgListV2(QwGetGroupmsgListV2Param param,String corpId);

    /**
     * 获取群发成员发送任务列表
     */
    QwGetGroupmsgTaskResult getGroupmsgTask(QwGetGroupMsgTask task,String corpId);

    /**
     * 获取企业群发成员执行结果
     */
    QwGroupmsgSendResult getGroupmsgSendResult(QwGetGroupmsgSendParam param,String corpId);

    /**
     * 发送新客户欢迎语
     */
    QwResult sendWelcomeMsg(SendWelcomeMsgParam param, String corpId);

//    /** 创建成员  仅通讯录同步助手或第三方通讯录应用可调用 */
//    QwCreateUserResult createUser(QwCreateUserParam param,String corpId);
//
//    /** 更新成员 仅通讯录同步助手或第三方通讯录应用可调用 */
//    QwResult updateUser(QwCreateUserParam param,String corpId);
//
//    /** 删除成员  仅通讯录同步助手或第三方通讯录应用可调用。
//     若是绑定了腾讯企业邮，则会同时删除邮箱账号。*/
//    QwResult deleteUser(String userid,String corpId);
//
//    /**  批量删除成员 仅通讯录同步助手或第三方通讯录应用可调用。 */
//    QwResult batchDeleteUser(QwBatchDeleteUserParam param,String corpId);

//    /** 邀请成员  仅通讯录同步助手或第三方通讯录应用可调用。*/
//    QwInviteUserResult inviteUser(QwInviteUserParam param,String corpId);

//    /** 获取加入企业二维码 须拥有通讯录的管理权限，使用通讯录同步的Secret。  */
//    QwJoinQrcodeResult getJoinQrcode(String corpId);

    /** 手机号获取userid 应用须拥有指定成员的查看权限。  */
    QwUseridResult getuseridBymobile(QwUseridBymobileParam param,String corpId);

    /** 邮箱获取userid 应用须拥有指定成员的查看权限。 */
    QwUseridResult getuseridByEmail(QwUseridByEmailParam param,String corpId);

//    /**
//     * 创建成员标签  标签总数不能超过3000个。
//     */
//    QwResult createUserTag(QwCreateUserTagParam param,String corpId);
//
//    /**
//     * 更新成员标签名称
//     */
//    QwResult updateUserTag(QwUpdateUserTagParam param,String corpId);
//
//    /**
//     * 删除成员标签
//     */
//    QwResult deleteUserTag(int tagId,String corpId);
//
//    /**
//     * 获取标签成员
//     */
//    QwTagMemberResult getUserTag(int tagId,String corpId);
//
//    /**
//     * 添加标签成员 userList企业成员ID列表,partylist企业部门ID列表（俩者不可同时为空）
//     */
//    QwResult addTagUsersList(AddTagUsersListParam param,String corpId);
//
//    /**
//     * 删除标签成员
//     */
//    QwResult delTagUsers(AddTagUsersListParam param,String corpId);
//
//    /**
//     * 获取成员标签列表
//     */
//    QwTagListResult getUserTagList(String corpId);


    /**
     * 添加入群欢迎语素材
     */
    QwAddWelcomeResult addGroupWelcomeTemplate(QwGroupWelcomeTemplateParam qwGroupWelcomeTemplateParam, String corpId);

    /**
     * 编辑入群欢迎语
     */
    QwResult editGroupWelcomeTemplate(QwGroupWelcomeTemplateParam qwGroupWelcomeTemplateParam,String corpId);

    /**
     * 获取入群欢迎语素材
     */
    QwGroupWelcomeTemplateRusult getGroupWelcomeTemplate(String templateId, String corpId);

    /**
     * 删除入群欢迎语素材
     */
    QwResult delGroupWelcomeTemplate(String templateId,String corpId);


    /**
     * 永久上传图片
     */
//    QwUploadImgResult uploadImgByFile(MultipartFile file, String corpId);
    QwUploadImgResult uploadimgs(String url,String corpId) throws IOException;


    /**
     * 上传临时文件 有效期3天
     */
    QwUploadResult upload(File file, String type, String corpId) throws IOException;
//    QwUploadResult upload(MultipartFile file, String type, String corpId) throws IOException;

    /** 获取临时素材  地址和临时文件的mediaId*/
    JSONObject getMedia(String mediaId,String corpId);

    /** 配置客户联系「联系我」方式   */
    QwAddContactWayResult addContactWay(QwAddContactWayParam param,String corpId);


    /** 获取企业已配置的「联系我」方式 */
    QwGetContactWayResult  getContactWay(QwGetContactWayParam param,String corpId);

    /** 获取企业已配置的「联系我」列表 */
    QwListContactWayReslut listContactWay(QwListContactWayParam param,String corpId);


    /** 更新企业已配置的「联系我」方式  */
    QwResult updateContactWay(QwUpdateContactWayParam param, String corpId);

    /** 删除企业已配置的「联系我」方式 */
    QwResult delContactWay(QwGetContactWayParam param,String corpId);

    /**
     *  配置客户群进群方式
     */
    QwAddContactWayResult addJoinWay(QwAddJoinWayParam param,String corpId);


    /** 获取客户群进群方式配置 */
    QeGetJoinWayResult getJoinWay(QwGetContactWayParam param,String corpId);

    /** 更新客户群进群方式配置 */
    QwResult updateJoinWay(QwAddJoinWayParam param,String corpId);

    /** 删除客户群进群方式配置 */
    QwResult delJoinWay(QwGetContactWayParam param,String corpId);

    /**
    *  获取「联系客户统计」数据
    */
    QwUserBehaviorDataResult getUserBehaviorData(QwUserBehaviorDataParam param, String corpId);

    /**
    *  获取「群聊数据统计」数据  按自然日聚合
    */
    QwGroupChatStatisticResult getGroupChatStatistic(QwGroupChatStatisticParam param, String corpId);

    /**
     *  获取「群聊数据统计」数据  按群主聚合
     */
    QwGroupChatStatisticResult getGroupChatStatisticByOwner(QwGroupChatStatisticParam param,String corpId);

    /**
    * userid转openid
    */

    QwOpenidResult useridToOpenid(QwOpenidByUserParams param, String corpId);

    /**
    *  外部联系人openid
    */
    QwOpenidResult externalcontactToOpenid(QwOpenidByExternalcontactParams param,String corpId);

    String getToken(String corpId,String corpSecret);


    /**
    *   用于将企业主体的明文corpid转换为服务商主体的密文corpid。
    */

    QwcorpidToOpencorpidResult openCorpid(String corpId, String providerAccessToken);

    /**
     * 服务商-获取企业永久授权码
     */
    QwPermanentCodeResult getPermanentCode(QwPermanentCodeParam param,String suite_access_token);

    /**
     *  服务商-获取第三方应用凭证/代开发应用模板的(授权时候/通讯录时)
     */
    String getSuiteToken(QwSuiteTokenParams qwSuiteTokenParams);

    /**
    * 服务商-获取获取服务商凭证（用于企业cropid明文转密文cropid ）
    */
    String getProviderToken(QwProviderTokenParams params );


    /**
     * 服务商-获取通讯录的token
     */
    String getBookAccessToken(QwGetCorpTokenParam param,String suite_access_token);

    /**
    * 服务商-读取员共信息 （通过userid）
    */
    String getServerQwUserName(String corpId,String Secret,String userid);

    /**
     *  获取部门列表
     */
    QwDeptResult getDepartmentList(String corpId);

    /**
    *   侧边栏-获取企业的  jsapi_ticket
    */
//    QwJsapiTicketResult getJsapiTicket(String bookCorpId,String bookSecret,String corpId);
    QwJsapiTicketResult getJsapiTicket(String bookCorpId,String bookSecret);

    /**
    * 侧边栏-获取企业微信当前登录人的userId
    */
    QwJsapiTicketResult getQwUserid(String code,String corpId,String appSecret);

    /**
    * 侧边栏-获取应用的 jsapi_ticket
    */
//    QwJsapiTicketResult getJsapiTicketApp(String corpId,String appSecret,String corpId);
    QwJsapiTicketResult getJsapiTicketApp(String corpId,String appSecret);

    /**
    * 上传附件资源（朋友圈，商品图册专用）
    */
    QwUploadAttachmentResult  uploadAttachment(String url,String type,String corpId) throws IOException;

    /**
    * 发送客户朋友圈
    */
    QwAddMomentTaskResult addMomentTask(QwAddMomentTask qwAddMomentTask,String corpId);

    /**
    * 获取任务创建结果
    */
    QwGetMomentTaskResult getMomentTaskResult(String jobid,String corpId);

    /**
    *  停止发表企业朋友圈
    */
    QwResult cancelMomentTask(QwCancelMomentTask qwCancelMomentTask,String corpId);
    /**
    * 获取客户朋友圈企业发表的列表
    */
    QwGetMomentTaskGResult getMomentTaskGResult(QwGetMomentTask qwGetMomentTask, String corpId);
    /**
    * 获取客户朋友圈发表时选择的可见范围
    */
    QwGetMomentCustomerListResult getMomentCustomerList(QwGetMomentCustomerListParam customerListParam,String corpId);
    /**
    * 获取客户朋友圈发表后的可见客户列表
    */
    QwGetMomentCustomerListResult getMomentSendResult(QwGetMomentSendResultParam qwGetMomentSendResultParam,String corpId);
    /**
    * 获取客户朋友圈的互动数据
    */
    QwGetMomentCommentsParamResult getMomentComments(QwGetMomentCommentsParam qwGetMomentCommentsParam,String corpId);

    // 获取用户列表
    QwUserIdResult getUserList(String corpId);

    // 获取外部联系人列表
    QwExternalContactListResult getExternalcontactList(String userId,String corpId);
    // 获取外部联系人详情
    QwExternalContactResult getExternalcontact(String userId,String corpId);
    // 批量获取客户详情
    QwExternalContactAllListResult getAllExternalcontactList(QwExternalListParam param,String corpId);

    // 外部联系人备注
    QwExternalContactRemarkResult externalcontactRemark(QwExternalContactRemarkParam param,String corpId);
    QwTagResult getTag(QwTagParam param,String corpId);
    QwAddTagResult addTag(QwAddTagParam param,String corpId);
    QwResult editTag(QwEditTagParam param,String corpId);
    QwResult delTag(QwTagParam param,String corpId);
    //分配在职成员客户
    QwTransferCustomerResult transferCustomer(QwTransferCustomerParam param,String corpId);
    //查询客户接替状态
    QwGetTransferResult getTransfer(QwGetTransferParam param,String corpId);
    //分配在职成员的客户群
    QwGroupChatTransferResult groupChatTransfer(QwGroupChatTransferParam param,String corpId);
    //分获取待分配成员列表
    QwUnassignedListResult getUnassignedList(QwUnassignedListParam param,String corpId);
    //分配在离职成员的客户
    QwTransferCustomerResignedResult resignedTransferCustomer(QwTransferCustomerResignedParam param,String corpId);
    //查询客户接替状态
    QwGetTransferResult getResignedTransfer(QwGetTransferParam param,String corpId) ;
    //分配离职成员的客户群
    QwGroupChatTransferResult resignedGroupChatTransfer(QwGroupChatTransferParam param,String corpId);

    QwResult editUserTag(QwEditUserTagParam param,String corpId);

    QwSendMsgResult sendMsg(QwSendMsgParam param,String corpId);

    QwLinkListResult linkList(QwParam param,String corpId);


    QwLinkGetResult linkGet(QwLinkGetParam param,String corpId);

    QwLinkCreateResult linkCreate(QwLinkCreateParam param,String corpId);

    QwResult linkUpdate(QwLinkCreateParam param,String corpId);

    QwResult linkDelete(QwLinkGetParam param,String corpId);

    QwLinkCustomerResult linkCustomer(QwLinkCustomerParam param,String corpId);





}
