package com.hotent.uc.manager;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.hotent.base.manager.BaseManager;
import com.hotent.base.model.CommonResult;
import com.hotent.uc.model.Org;
import com.hotent.uc.model.OrgExternalDept;
import com.hotent.uc.model.ScanLogin;
import com.hotent.uc.model.User;
import org.omg.CORBA.OBJ_ADAPTER;

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

/**
 * @description  钉钉api调用服务类
 * @author  yangzibin
 * @date    2024/1/2 10:09
 * @param	null
 * @return
 */
public interface DingApiManager extends BaseManager<OrgExternalDept> {
    /**
     * @description 创建钉钉部门
     * @author  yangzibin
     * @date    2024/1/2 10:51
     * @param	org
     * @return  java.lang.String  钉钉部门id
     */
    String[]  addDingApiDept(Org org,String orgId);

    JSONObject updateDingApiDept(OrgExternalDept org,String orgId);
    /**
     * @description  循环拉取钉钉部门列表，包括子部门
     * @author  yangzibin
     * @date    2024/1/2 11:20
     * @param
     * @return  void
     */
    void loopGetDeptList(String orgId,String deptId,String pathName);

    /**
     * @description 获取钉钉部门数据并且进行同步部门操作
     * @author  yangzibin
     * @date    2024/1/10 15:50
     * @param	orgId
     * @param	deptId
     * @return  com.hotent.base.model.CommonResult<java.lang.String>
     */
    CommonResult<String> synDingDept(String orgId,String deptId);
    /**
     * @description  保存钉钉部门数据到中台
     * @author  yangzibin
     * @date    2024/1/2 16:23
     * @param	extDingDept
     * @return  void
     */
    void saveDingDept(String orgId,OrgExternalDept extDingDept);
  /**
   * @description
   * @author  钉钉关联系统部门，如果没有关联成功，需要创建系统部门，请系统创建部门方法
   * @date    2024/1/3 11:36
   * @param	orgId
   * @param	externalDeptId
   * @return  com.hotent.base.model.CommonResult<java.lang.String>
   */
    CommonResult<String> releDingToSystemDept(String orgId, String externalDeptId);


    /**
     * @description
     * @author  调用此方法前提知道关联表没有此部门的记录。肯定是新建钉钉部门
     * @date    2024/1/3 11:36
     * @param	orgId
     * @param	externalDeptId
     * @return  com.hotent.base.model.CommonResult<java.lang.String>
     */
    CommonResult<String> releSystemToDingdept(String orgId, String deptId);

    /**
     * @description
     * @author  yangzibin
     * @date    2024/1/9 16:49
     * @param	orgId	组织id
     * @param	outType	0=钉钉=>中台  1 中台=>钉钉
     * @return  com.hotent.base.model.CommonResult<java.lang.String>
     */
    CommonResult<String> getDingALlUser(String orgId);

    /**
     * @description  开启钉钉stream接收推送数据
     * @author  yangzibin
     * @date    2024/1/10 9:33
     * @param	orgId
     * @param	open
     * @return  com.hotent.base.model.CommonResult<java.lang.String>
     */
    CommonResult<String> startDingStreamData(String orgId,String open);


   /**
    * @description  
    * @author  yangzibin 
    * @date    2024/1/15 14:51
    * @param	orgId	
 * @param	parentId
    * @return  com.hotent.base.model.CommonResult<com.hotent.uc.model.OrgExternalDept>
    */
    CommonResult<List<OrgExternalDept>> queryExtDeptList(String orgId, String parentId);

    /**
     * @description  钉钉事件推送
     * @author  yangzibin
     * @date    2024/1/15 15:29
     * @param	msg_signature
     * @param	timeStamp
     * @param	nonce
     * @param	json
     * @return  java.util.Map<java.lang.String,java.lang.String>
     */
    Map<String, Object> getDingPushData(String msg_signature,String timeStamp,String nonce,JSONObject json,String corpId);

    /**
     * @description  删除钉钉部门接口
     * @author  yangzibin
     * @date    2024/1/17 14:22
     * @param	org
     * @return  java.util.Map<java.lang.String,java.lang.Object>
     */
    Map<String,Object> deleteDingDept(Org org);


    /**
     * @description  获取钉钉token
     * @author  yangzibin
     * @date    2024/3/19 10:40
     * @param	orgId
     * @return  java.lang.String
     */
    String getDingTokenNew(String orgId,String tokenType);

    /**
     * @description  获取钉钉用户unionId
     * @author  yangzibin
     * @date    2024/3/19 10:40
     * @param	orgId
     * @return  java.lang.String
     */
    String getDingUserUnionId(String orgId,String dingUserId);

    boolean updateDingToTask(String taskId);
  /**
   * @description 发送钉钉工作通知
   * @author  yangzibin
   * @date    2024/7/10 17:40
   * @param	userId	 系统用户id
   * @param	todoId	 待办id
   * @param	isPushType	 0=pc消息点击1=移动端2=全发3=全不发
   * @return  cn.hutool.json.JSONObject
   */
    JSONObject sendDingMessage(String userId, String todoId, String content, JSONArray jsonObject,String isPushType);


    /**
     * @description  发动钉钉待办任务
     * @author  yangzibin
     * @date    2024/7/10 17:45
     * @param	userId
     * @param	todoId
     * @param	title
     * @return  cn.hutool.json.JSONObject
     */
    JSONObject sendDingTodoTask(String userId,String todoId,String content,String isPushType);


    Map<String,Object> getWelcomeDage(String orgId);

   /**
    * @description  发送通知
    * @author  yangzibin
    * @date    2024/9/29 17:18
    * @param	userId
    * @param	content
    * @return  cn.hutool.json.JSONObject
    */
    JSONObject sendDingMessageByZabbix(String userId, String content);
}
