package com.qmth.distributed.print.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.distributed.print.business.entity.TBSyncTask;
import com.qmth.teachcloud.common.bean.params.UserPushParam;
import com.qmth.teachcloud.common.bean.result.SyncListResult;
import com.qmth.teachcloud.common.entity.SysUser;
import com.qmth.teachcloud.common.enums.PushTypeEnum;
import com.qmth.teachcloud.common.enums.TaskResultEnum;
import com.qmth.teachcloud.common.enums.TaskStatusEnum;

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

/**
 * <p>
 * 同步数据 服务类
 * </p>
 */
public interface TBSyncTaskService extends IService<TBSyncTask> {

    TBSyncTask saveTask(Long schoolId,  Long objectId, PushTypeEnum type, String remark);

    void updateStatusAndResultById(Long id, Long thirdRelateId, TaskStatusEnum status, TaskResultEnum result, String errorMessage);

    void updateStatusAndResultById(Long id, Long thirdRelateId, TaskStatusEnum status, TaskResultEnum result, String errorMessage, String remark);

    TBSyncTask savePushCommon(PushTypeEnum pushTypeEnum, Map map, SysUser sysUser);

    TBSyncTask savePushCommon(PushTypeEnum pushTypeEnum, Map map, SysUser sysUser, Long objectId);

    /**
     * 同步任务管理分页查询
     *
     * @param schoolId   学校id
     * @param status     任务状态
     * @param type       同步任务类型
     * @param result     任务结果
     * @param pageNumber 分页页数
     * @param pageSize   分页容量
     * @return 分页结果
     */
    IPage<SyncListResult> query(Long schoolId, TaskStatusEnum status, PushTypeEnum type, TaskResultEnum result, int pageNumber, int pageSize);


    /**
     * 查询用户推送记录
     *
     * @param userId   用户id
     * @param schoolId 学校id
     * @return 记录
     */
    TBSyncTask findUserPushRecord(Long userId, Long schoolId);

    /**
     * 初始化用户推送任务
     *
     * @param userPushMap 用户map
     * @param requestUser 请求用户
     */
    void initUserPushTasks(Map<Long, List<UserPushParam>> userPushMap, SysUser requestUser);

    /**
     * 用户推送任务进行中
     *
     * @param userId      用户id
     * @param requestUser 请求用户
     * @return 。。
     */
    TBSyncTask runningUserPushTask(Long userId, SysUser requestUser);

    /**
     * 失败任务-重新同步
     *
     * @param id 任务ID
     */
    void resync(Long id) throws IllegalAccessException;
}
