package jnpf.cultivate.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.model.cultivate.dto.learn.BatchCommonCountDto;
import jnpf.model.cultivate.dto.learn.NeedPerDayAlertDto;
import jnpf.model.cultivate.po.learn.FtbCultivateLearnTask;
import jnpf.model.cultivate.req.learn.QueryLearnTaskCountListReq;
import jnpf.model.cultivate.req.learn.QueryLearnTaskListReq;
import jnpf.model.cultivate.v2.task.req.V2MyCultivateTaskListForReq;
import jnpf.model.cultivate.v2.task.vo.V2CultivateTaskCountVo;
import jnpf.model.cultivate.v2.task.vo.V2CultivateTaskListForManagerVo;
import jnpf.model.cultivate.v2.task.vo.V2MyCultivateLearnTaskListVo;
import jnpf.model.cultivate.vo.learn.FtbCultivateLearnTaskInfoCountListVO;
import jnpf.model.cultivate.vo.learn.FtbCultivateLearnTaskInfoListVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @Author: peng.hao
 * @create: 2024/9/9:11:05
 */
public interface FtbCultivateLearnTaskMapper extends BaseMapper<FtbCultivateLearnTask> {
    /**
     * 查询分类下任务数量
     *
     * @return
     */
    List<BatchCommonCountDto> groupCountCateNum();

    /**
     * web查询任务列表
     *
     * @param page
     * @param params
     * @return
     */
    Page<FtbCultivateLearnTaskInfoListVO> getMyWebPageList(@Param("page") Page<FtbCultivateLearnTask> page, @Param("params") QueryLearnTaskListReq params);

    /**
     * 查询学习任务统计列表
     *
     * @param page
     * @param params
     * @return
     */
    Page<FtbCultivateLearnTaskInfoCountListVO> queryLearnCountList(@Param("page") Page<FtbCultivateLearnTask> page, @Param("params") QueryLearnTaskCountListReq params);

    /**
     * 查询需要提醒的任务列表
     *
     * @return
     */
    List<NeedPerDayAlertDto> queryNeedPerDayAlert();

    /**
     * 查询任务列表及其统计信息
     *
     * @param page
     * @param keyWord
     * @param status
     * @return
     */
    Page<V2CultivateTaskListForManagerVo> queryTaskListForApp(
            @Param("page") Page<V2CultivateTaskListForManagerVo> page,
            @Param("keyWord") String keyWord,
            @Param("status") Integer status);

    Long queryTaskCountForApp(@Param("keyWord") String keyWord, @Param("status") Integer status);

    Page<V2MyCultivateLearnTaskListVo> queryMyTaskListForApp(@Param("page") Page<V2MyCultivateLearnTaskListVo> page,
                                                             @Param("params") V2MyCultivateTaskListForReq params,
                                                             @Param("userId") String userId);

    Integer queryMyTaskCountForApp(@Param("keyWord") String keyWord, @Param("userId") String userId, @Param("status") Integer status);

    /**
     * 查询未完成任务列表
     *
     * @param userId 用户id
     * @return 列表
     */
    List<V2MyCultivateLearnTaskListVo> queryMyNoCompleteTaskListForUserId(@Param("userId") String userId);

    List<String> queryTaskHasExam(@Param("taskIds") List<String> taskIds, @Param("examId") String examId);

    List<String> queryTaskHasPracticeId(@Param("taskIds") List<String> taskIds, @Param("practiceId") String practiceId);

    List<String> queryTaskHasIdentityId(@Param("taskIds") List<String> taskIds, @Param("identityId") String identityId);

    List<String> queryMyRunningTask(@Param("userId") String userId, @Param("courseId") String courseId);

    /**
     * V2查询任务统计列表
     *
     * @param page
     * @param taskName
     * @param status
     * @param creatorTimeStart
     * @param creatorTimeEnd
     * @return
     */
    Page<V2CultivateTaskCountVo> queryV2TaskCountList(
            @Param("page") Page<V2CultivateTaskCountVo> page,
            @Param("taskName") String taskName,
            @Param("status") Integer status,
            @Param("creatorTimeStart") Date creatorTimeStart,
            @Param("creatorTimeEnd") Date creatorTimeEnd);
}