package com.yida.data.system.service;

import com.yida.data.common.core.entity.system.Dept;
import com.yida.data.common.core.entity.system.EduQywxServiceProvider;
import com.yida.data.common.core.entity.system.EduQywxServiceProviderSchool;
import org.springframework.scheduling.annotation.Async;
import org.w3c.dom.Element;

/**
 * 企业微信服务商处理方法service
 *
 * @author ZYJ
 * @date 2022/11/3
 */
public interface QywxServiceProviderService {

    /**
     * 授权安装模板应用
     *
     * @param suiteId         模板id
     * @param authCode        临时授权码
     * @param serviceProvider 企业微信服务商信息
     * @author ZYJ
     * @date 2022/11/3 16:22
     */
    void installTemplateApp(String suiteId, String authCode, EduQywxServiceProvider serviceProvider);

    /**
     * 处理服务商代开发应用模板ticket值
     *
     * @param suiteId     模板id
     * @param suiteTicket ticket值
     * @author ZYJ
     * @date 2022/11/3 11:13
     */
    void handleTemplateSuiteTicket(String suiteId, String suiteTicket);

    /**
     * 客户删除应用
     *
     * @param suiteId         模板id
     * @param authCorpId      授权企业微信id
     * @param serviceProvider 企业微信服务商信息
     * @author ZYJ
     * @date 2022/11/11 14:26
     */
    void deleteTemplateApp(String suiteId, String authCorpId, EduQywxServiceProvider serviceProvider);

    /**
     * 代开发应用重置secret
     *
     * @param suiteId         模板id
     * @param resetAuthCode   临时授权码
     * @param serviceProvider 企业微信服务商信息
     * @author ZYJ
     * @date 2022/11/11 16:01
     */
    void resetTemplateAppAuthCode(String suiteId, String resetAuthCode, EduQywxServiceProvider serviceProvider);

    /**
     * 处理通讯录事件
     * 通讯录授权编辑回调
     *
     * @param root            xml明文
     * @param serviceProvider 企业微信服务商信息
     * @param suiteId         模板id
     * @author ZYJ
     * @date 2022/11/21 16:10
     */
//    @Async
    void handleConcat(Element root, EduQywxServiceProvider serviceProvider, String suiteId);

    /**
     * 处理通讯录事件
     * 家校沟通应用回调
     *
     * @param root           xml明文
     * @param providerSchool 企业微信服务商-学校密文
     * @author ZYJ
     * @date 2023/2/24 15:59
     */
    void handleConcat(Element root, EduQywxServiceProviderSchool providerSchool);

    /**
     * 处理家校沟通通讯录事件
     *
     * @param root           xml明文
     * @param providerSchool 企业微信服务商-学校密文corpId
     * @param school         学校信息
     * @author ZYJ
     * @date 2022/12/6 10:57
     */
    void handleSchoolConcat(Element root, EduQywxServiceProviderSchool providerSchool, Dept school);

    /**
     * 加密对应服务商的学校corpId
     *
     * @param providerCorpId 服务商企业微信id
     * @param corpId         学校企业微信id
     * @author ZYJ
     * @date 2023/1/14 15:02
     */
    void changeCorpId(String providerCorpId, String corpId);
}