package com.gic.haoban.manage.api.service;

import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.*;

import java.util.List;
import java.util.Set;

public interface WxEnterpriseApiService {

    /**
     * 好办接收企业微信回调信息
     *
     * @param dto
     */
    void callbackReviceEnterprise(QywxCorpInfoSimpleDTO dto);

    /**
     * desc: 运维后台获取微信企业id列表
     *
     * @param pageInfo           分页参数
     * @param keyword            关键字
     * @param enterpriseIds      企业id列表
     * @param gicContactFlag     关联标记
     * @param version            版本
     * @param enterpriseIdsNotIn 企业不存在列表
     * @param loginUserId        登录用户id
     * @param appType            应用类型，0第三方 1自建
     * @return : {@link Page< YwWxEnterpriseDTO>}
     * @author : YongEn
     * @date : 2022/2/15
     */
    com.gic.api.base.commons.Page<YwWxEnterpriseDTO> list(BasePageInfo pageInfo,
                                                          String keyword,
                                                          List<String> enterpriseIds,
                                                          Integer gicContactFlag,
                                                          String version,
                                                          List<String> enterpriseIdsNotIn,
                                                          String loginUserId,
                                                          Integer appType);

    /**
     * 获取一个
     *
     * @param wxEnterpriseId
     * @return
     */
    WxEnterpriseDTO getOne(String wxEnterpriseId);
    
    WxEnterpriseDTO selectByWxaAppid(String appid);
    
    WxEnterpriseQwDTO getQwInfo(String wxEnterpriseId);

    /**
     * 根据corpId查询一条数据
     *
     * @param corpId
     * @return
     */
    WxEnterpriseDTO getEnterpriseBycorpId(String corpId);
    
    ServiceResponse<Boolean> isStopHaoban(String corpId);

    /**
     * 更新企业
     *
     * @param enterpriseDTO
     */
    void update(WxEnterpriseDTO enterpriseDTO);

    List<YwWxEnterpriseDTO> listAll();

    List<YwWxEnterpriseDTO> listByIds(Set<String> enterpriseIds);

    /**
     * 获取配置
     *
     * @param wxEnterpriseId
     * @param secretType
     * @param enterpriseId
     * @return
     */
    SecretSettingDTO getSecretSetting(String wxEnterpriseId, int secretType, String enterpriseId);

    /**
     * 保存
     *
     * @param secretSettingDTO
     * @return
     */
    boolean saveSecretSetting(SecretSettingDTO secretSettingDTO);

    /**
     * secretList
     *
     * @param wxEnterpriseId
     * @return
     */
    List<SecretSettingDTO> listSecret(String wxEnterpriseId);

    /**
     * 删除
     *
     * @param secretId
     * @return
     */
    boolean delSecretSetting(String secretId);

    /**
     * 保存小程序配置
     *
     * @param miniprogramSettingDTO
     * @return
     */
    boolean saveMiniprogramSetting(MiniprogramSettingDTO miniprogramSettingDTO);


    /**
     * 查询小程序配置列表
     *
     * @param wxEnterpriseId
     * @return
     */
    List<MiniprogramSettingDTO> listMiniprogramSetting(String wxEnterpriseId);

    /**
     * 获取单个小程序配置
     *
     * @param wxEnterpriseId
     * @param enterpriseId
     * @return
     */
    MiniprogramSettingDTO getMiniprogramSettingByEid(String wxEnterpriseId, String enterpriseId);


    /**
     * 获取单个小程序配置
     *
     * @param wxEnterpriseId
     * @param appId
     * @return
     */
    MiniprogramSettingDTO getMiniprogramSettingByAppId(String wxEnterpriseId, String appId);

    /**
     * 删除 小程序配置
     *
     * @return
     */
    boolean delMiniprogramSettingByEid(String id);

    /**
     * 获取欢迎语
     *
     * @param wxEnterpriseId
     * @return
     */
    //接口无效
//    WelcomeDTO getWelcome(String wxEnterpriseId);

    /**
     * 获取欢迎语
     *
     * @param wxEnterpriseId
     * @return
     */
    boolean setWelcome(String wxEnterpriseId, Integer openFlag);

    /**
     * 删除欢迎语
     *
     * @param wxEnterpriseId
     * @return
     */
    boolean delWelcome(String wxEnterpriseId);


    /**
     * 企微回调-同意授权转换external_userid
     *
     * @param corpId        公司标识(同意授权的企业ID)
     * @param serviceCorpId 服务公司id(服务商企业ID)
     * @author mozhu
     * @date 2021-11-30 19:14:08
     */
    void agreeExternalUseridCallBack(String corpId, String serviceCorpId);


    /**
     * 同意外部标识标志
     *
     * @param wxEnterpriseId 公司标识
     * @param openFlag       开放的标志
     * @author mozhu
     * @date 2021-12-18 11:55:51
     */
    void agreeExternalUseridFlag(String wxEnterpriseId, Integer openFlag);

    /**
     * 好办登录-插入隐私协议
     *
     * @param staffPrivacyUseLogDTO 员工隐私使用日志dto
     * @author mozhu
     * @date 2022-04-15 15:03:14
     */
    void wellDoneLoginAddPrivacy(StaffPrivacyUseLogDTO staffPrivacyUseLogDTO);

    /**
     * 通过id获取密钥设置
     *
     * @param secretId 秘密身份
     * @return {@link SecretSettingDTO }
     * @author mozhu
     * @date 2022-06-27 13:44:16
     */
    SecretSettingDTO getSecretSettingById(String secretId);
    
    public void updateWxSecurityType(String wxEnterpriseId) ;
    
    public int calcSecretType(String wxEnterpriseId) ;
    
    /**
     * 
    * @Title: stopHaoban
    * @Description: 停用好办
    * @author xugh
    * @param enterpriseId
    * @throws
     */
    void stopHaoban(String enterpriseId) ;
    
    public boolean haobanIsStop(String eid) ;
    
    public String getEndDate(String enterpriseId) ;

    /**
     * 新增或者修改企业微信配置信息
     * @param enterpriseDTO
     * @return
     */
    ServiceResponse<Boolean> saveOrUpdate(WxEnterpriseDTO enterpriseDTO);

    /**
     * 过滤已经存在的自建应用appid
     * @param wxAppidList 好办自建应用appidList
     * @return 过滤的好办自建应用appidList
     */
    ServiceResponse<List<String>> filterWxAppidList(List<String> wxAppidList);
    /**
     * 定时任务，同步自建应用信息
     */
    ServiceResponse<Boolean> syncWxEnterpriseInfo(String params);

    /**
     * 删除
     * @param wxEnterpriseId 企业微信id
     * @return
     */
    ServiceResponse<Boolean> deleteByWxEnterpriseId(String wxEnterpriseId);

}
