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

import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.PreDealLogInfoDTO;
import com.gic.haoban.manage.api.dto.SyncCheckDTO;
import com.gic.haoban.manage.api.dto.SyncSingleDealDTO;
import com.gic.haoban.manage.api.dto.SyncTaskDTO;
import com.gic.haoban.manage.api.enums.SyncTaskStatusEnum;

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

/**
 * Created 2020/4/9.
 *
 * @author hua
 */
public interface DealSyncOperationApiService {

    /**
     * 部门同步处理
     * "routerName": "departmentSyncDealMq"
     *
     * @param params
     */
    void departmentDealMq(String params);
    /**
     * mq拆分
     * 部门同步处理
     *
     * @param params
     */
    void departmentDealMq2(String params);

    /**
     * 处理前端数据
     *
     * @param addList
     * @param editList
     */
    void dealDepartment(String taskId, String wxEnterpriseId, List<SyncSingleDealDTO> addList, List<SyncSingleDealDTO> editList);

    /**
     * 重新执行任务
     *
     * @param taskId
     */
    void reDealDepartment(String taskId, int dataType);

    /**
     * 创建任务
     *
     * @param taskName
     * @param userId
     * @param desc
     */
    String createTask(String wxEnterpriseId, String taskName, String userId, String desc);

    /**
     * 创建任务
     *
     * @param taskName
     * @param userId
     * @param desc
     */
    String createQywxTask(String wxEnterpriseId, String taskName, String userId, String desc);

    /**
     * 关闭任务
     *
     * @param wxEnterpriseId
     * @return
     */
    boolean closeTask(String wxEnterpriseId);


    /**
     * 解锁
     *
     * @param taskId
     */
    void unlockTask(String taskId);

    /**
     * 校验是否锁
     *
     * @param wxEnterpriseId
     * @return
     */
    String getTaskLock(String wxEnterpriseId);

    /**
     * 校验同步状态
     *
     * @param wxEnterpriseId
     * @return
     */
    SyncCheckDTO getTaskCheck(String wxEnterpriseId);

    /**
     * 同步日志
     *
     * @param wxEnterpriseId
     * @return
     */
    Page<SyncTaskDTO> listSyncTask(String wxEnterpriseId, BasePageInfo pageInfo);

    /**
     * 同步日志
     *
     * @param wxEnterpriseId
     * @return
     */
    Page<PreDealLogInfoDTO> listSyncTaskDetail(String wxEnterpriseId, String taskId, BasePageInfo pageInfo);


    /**
     * 处理同步
     */
    String dealQywxDepartment(String taskId, String wxEnterpriseId);

    /**
     * 清理不存在的数据
     *
     * @param wxEnterpriseId
     * @param taskId
     */
    void cleanDiffrence(String wxEnterpriseId, String taskId);

    /**
     * 创建企业微信好友刷新任务
     *
     * @param wxEnterpriseId
     * @param taskName
     * @param staffId
     * @param desc
     * @return
     */
    String createWxFriendTask(String wxEnterpriseId, String taskName, String staffId, String desc);

    /**
     * 处理需要处理的导购
     *
     * @param taskId
     * @param wxEnterpriseId
     */
    void dealWxFriendClerk(String taskId, String wxEnterpriseId);

    /**
     * 创建企业微信好友刷新任务
     *
     * @param wxEnterpriseId
     * @param taskName
     * @param staffId
     * @return
     */
    String createWxFriendTaskSingle(String wxEnterpriseId, String taskName, String staffId, String staffName, int syncTaskType);

    /**
     * 单个导购刷新
     *
     * @param taskId
     * @param wxUserId
     * @param staffId
     * @param wxEnterpriseId
     */
    void dealWxFriendClerkSingle(String taskId, String wxUserId, String staffId, String wxEnterpriseId);

    /**
     * 单个导购刷新
     *
     * @param taskId
     * @param wxEnterpriseId
     */
    void dealWxFriendStore(String taskId, String storeId, String wxEnterpriseId);

    /**
     * 定时刷新企微好友
     *
     * @param res
     */
    @Deprecated
    void quartWxFriendClerk(String res);


    /**
     * 获取刷新状态
     *
     * @param wxEnterpriseId
     * @param staffId
     * @return true 刷新中 false 没刷新或刷新完成
     */
    boolean getFreshFriendSyncTask(String wxEnterpriseId, String staffId);

    /**
     * 创建标签任务
     *
     * @param wxEnterpriseId
     * @return
     */
    String createTagTask(String wxEnterpriseId, String addUser, String memberTagId);

    /**
     * 执行任务
     *
     * @param wxEnterpriseId
     * @param enterpriseId
     * @param tagIds
     * @param taskId
     */
    void dealTagTask(String wxEnterpriseId, String enterpriseId, List<String> tagIds, String taskId);
    // 同步好友状态定时
    void taskStatusTimer(String params) ;
    void staffTaskStatusTimer(String params) ;
    // 同步通讯录状态定时
    void taskSyncStaffTimer(String params) ;

    void sendToMq(String taskId, Set<String> dealList, SyncTaskStatusEnum syncTaskStatusEnum , String mqName) ;
}
