package com.storlead.wx.service;


import cn.hutool.json.JSONObject;
import com.storlead.framework.common.vo.UserVo;
import com.storlead.wx.pojo.vo.SummaryInfoVO;
import com.storlead.wx.pojo.vo.WechatAppBO;
import com.storlead.wx.pojo.vo.WechatToken;

import javax.validation.constraints.NotNull;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Set;

/**
 * 企业微信服务类
 *
 * @author blank
 * @date 2021-6-16 上午 10:27
 */
public interface CorpWeChatService {

    /**
     * 获取企业微信ACCESS_TOKEN
     *
     * @return cn.hutool.json.JSONObject
     * @author blank
     * @date 2021-3-8 下午 12:10
     */
    WechatToken getAccessToken();

    /**
     * 获取企业微信 JS ticket
     *
     * @return com.storlead.web.model.vo.WeChatAccessTokenVO
     * @author blank
     * @date 2021-3-8 下午 2:30
     */
    WechatToken getJSApiTicket();

    /**
     * 返回用于企业微信登陆所需要的参数
     *
     * @return cn.hutool.json.JSONObject
     * @author blank
     * @date 2021-3-9 下午 4:39
     */
    JSONObject getCorpWechatLoginParam();

    /**
     * 根据code登录
     *
     * @param code cdoe
     * @return cn.hutool.json.JSONObject
     * @author blank
     * @date 2021-3-9 下午 5:07
     */
    String login(String code);

    /**
     * 将给定的用户列表更新上企业微信对应的openid
     *
     * @param userList 用户列表
     * @return java.util.List<com.storlead.web.model.entity.User>
     * @author blank
     * @date 2021-3-9 下午 12:57
     */
    List<UserVo> syncUserOpenIdFormTencent(List<UserVo> userList);

    /**
     * 向指定用户或部门发送文本信息
     *
     * @param content 内容
     * @param userSet 用户列表
     * @param deptSet 部门列表
     * @return boolean
     * @author blank
     * @date 2021-3-9 下午 3:42
     */
    boolean sendTextMsg(@NotNull String content, Set<String> userSet, Set<Long> deptSet,WechatAppBO wechatApp);

        /**
         * 发送卡片消息
         *
         * @param title
         * @param title          卡片标题
         * @param description    卡片内容
         * @param redirectionUrl 点击卡片跳转URL
         * @param userSet        用户列表 企业微信id
         * @param deptSet        部门列表
         * @return boolean
         * @author blank
         * @date 2021-4-14 上午 11:32
         */
    boolean sendTextCardMsg(@NotNull String title, @NotNull String description, @NotNull String redirectionUrl, Set<String> userSet, Set<Long> deptSet);

    // boolean sendTextCardMsg(@NotNull String title, @NotNull String description, @NotNull String redirectionUrl, Set<String> userSet, Set<Long> deptSet);


    void syncWxUserIdByMobile(List<UserVo> userList);
    /**
     * 发送卡片消息
     *
     * @param title
     * @param title          卡片标题
     * @param description    卡片内容
     * @param redirectionUrl 点击卡片跳转URL
     * @param userSet        用户列表 用户id
     * @param deptSet        部门列表
     * @return boolean
     * @author blank
     * @date 2021-4-14 上午 11:32
     */
    boolean sendTextCardMsgByUserId(@NotNull String title, @NotNull String description, @NotNull String redirectionUrl, Set<String> userSet, Set<Long> deptSet);

    boolean sendTextCardMsgByUserId(@NotNull String title, @NotNull String description, Set<String> userSet) throws UnsupportedEncodingException;

    boolean sendTextCardMsgByUserId(@NotNull String title, @NotNull String description, Set<String> userSet, String router) throws UnsupportedEncodingException;

    boolean sendTextCardMsgByUserIdByAppCode(@NotNull String title, @NotNull String description, @NotNull String redirectionUrl, Set<String> users, Set<Long> deptSet,String appCode);


    List<SummaryInfoVO> getCheckinDayData(List<String> userIdList);
}
