package com.malk.service.dingtalk;

import java.util.List;
import java.util.Map;

public interface DDService {

    /**
     * 新发起审批15s内不允许撤销, 异步执行
     */
    void terminateRunningApprove_async(String access_token, String processInstanceId, boolean isSystem, String subject, String description, String operatingUserId, String noteUserId);

    /**
     * 钉钉查询假期余额返回是记录, 按照消失/天单位计算该假期类型下的余额
     */
    Map queryVacationQuota_balance(String access_token, String op_userid, String leave_code, String userids, int offset, int size);

    /**
     * 上传审批附件
     *
     * @param urlFile      远程文件地址
     * @param fileNamePure 文件名称[后缀自动通过地址获取]
     */
    Map uploadFileFormUrlForOverflow(String accessToken, String userId, String urlFile, String fileNamePure);

    /**
     * 上传审批附件
     *
     * @param filePath 已存在文件, 本地file绝对路径
     */
    Map uploadFileFormUrlForOverflow(String accessToken, String userId, String filePath);

    /**
     * 上传钉盘文件
     *
     * @param urlFile      远程文件地址
     * @param fileNamePure 氚云前端直接获取的附件ID，且免登后也无文件相关信息。若需要如文件名称，需要单独再查询SQL. 因此不能通过url截取文件名称
     * @param unionId      String.valueOf(ddClient_contacts.getUserInfoById(ddClient.getAccessToken(), ddConf.getOperator()).get("unionid"));
     */
    Map uploadFileFormUrlForDingDrive(String accessToken, String unionId, String spaceId, String parentId, String urlFile, String fileNamePure);

    // todo 通讯录部门结构返回; 通讯录全量数据同步; 限流控制

    /**
     * 判断员工是否在指定部门
     */
    boolean matchDepartment(String access_token, String userId, List<Long> deptIds);

    /**
     * 获取员工所属部门层级路径 [一个人存在多个部门默认取第一个, 不包含第一层部门]
     */
    List<Map> getUserDepartmentHierarchy(String access_token, String userId);

    /**
     * 获取员工所属部门层级路径 [名称拼接]
     */
    String getUserDepartmentHierarchyJoin(String access_token, String userId, String jon);

    /**
     * jsApi 注册
     *
     * @implNote H5无需配置, 但宜搭内免得需要配置鉴权, 才能获取到code. 宜搭非免登页面不会执行调用
     */
    Map registerJsApi(String url, String nonceStr);

    /**
     * 免登code获取用户信息
     */
    Map getUserInfoByCode(String code);
}
