package com.malk.service.h3yun;

import java.io.File;
import java.util.List;
import java.util.Map;

public interface CYClient {

    //////////////////////////// 单据流程 ////////////////////////////

    // todo: 统一规划宜搭和氚云格式

    /**
     * 查询表单数据
     *
     * @param schemaCode 表单编码
     * @param extInfo    扩展信息
     *                   - pageNumber 分页页码; pageSize 分页页大小，最大值500
     *                   - returnFields 需要返回的字段名，仅支持传入主表的字段
     *                   - matcherJson json格式的动态条件过滤器
     *                   - sortByFields: { fieldName: "排序字段名", direction: "Ascending：升序 / Descending：降序" } 排序字段结构列表
     */
    List<Map> queryData(String accessToken, String schemaCode, Map extInfo);

    /**
     * 创建流程数据 [todo: 接口代合并, 流程的逻辑为先创建表单数据为Draft, 再进行流程提交]
     *
     * @param extInfo 扩展信息, opUserId 操作用户ID
     *                - 流程发起, 需要传递创建Draft数据ID;
     *                - 创建表单数据 bizObjectJson ; isDraft 是否是草稿
     */
    Map operateData(String accessToken, String schemaCode, Map extInfo);

    //////////////////////////// 附件处理 ////////////////////////////

    /**
     * 获取附件临时免登地址 [此返回地址有效期为三十分钟]
     *
     * @param attachmentId 获取原附件预览地址 [只能作为在线预览, 接口传递无登录态, 参考 getAttachmentPreviewUrl]
     * @return 返回地址无后缀了[选择对应类型软件可打开], 建议通过氚云文件名做处理, 重新命名储存文件名称与后缀
     */
    String getTemporaryUrls(String accessToken, String attachmentId);

    /**
     * 储存氚云附件到本地, 保留文件名称与格式
     */
    File saveFromTemporaryUrl(String accessToken, Map attachmentId);


    //////////////////////////// 组织架构 ////////////////////////////

    /**
     * 获取用户数据
     * -
     * ppExt 氚云组织架构只有全量查询接口, 且部门和用户ID, 有单独ID. 更甚接口未返回钉钉userId与手机号登信息
     * 1. todo: 后续考虑新建氚云webservice进行查询
     * 2. 临时方案为, H_User系统表, 字段DingTalkAccount「返回格式为 userId.corpId」, 通过氚云定时任务储存与钉钉对照关系
     *
     * @param isRecursive 是否递归获取子级部门下的用户。默认值为false
     */
    @Deprecated
    List<Map> getUserInfoList(String accessToken, String departmentId, boolean isRecursive);

    /**
     * 获取组织数据 [ppExt: 氚云接口返回组织架构为平铺列表, 若需要可通过 parentId 构建]
     *
     * @param departmentId 为空返回同步部门
     */
    @Deprecated
    List<Map> getDepartmentInfoList(String accessToken, String departmentId);
}
