package jnpf.cultivate.mapper;

import jnpf.model.cultivate.dto.statistics.FtbCultivateStatisticsDTO;
import jnpf.model.cultivate.v2.statistics.V2CultivateLineNumDto;
import jnpf.model.cultivate.vo.statistics.FtbCultivateStatisticsVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FtbCultivateStatisticsMapper {
    /**
     * 统计培训学员数量
     */
    Integer numOfTrainees(@Param("params") FtbCultivateStatisticsDTO dto);

    /**
     * 获取热门课程信息
     */
    List<FtbCultivateStatisticsVO.PopularCourses> getPopularCourses(@Param("dto") FtbCultivateStatisticsDTO dto);

    /**
     * 统计学习中的课程数量
     *
     * @param dto 统计参数封装对象
     * @return 学习中的课程数量
     */
    Integer numberOfStudyCourses(@Param("params") FtbCultivateStatisticsDTO dto);

    /**
     * 计算学员累计学习时长
     * @param dto 统计参数封装对象
     * @return 累计学习时长
     */
    Integer accumulatedTime(@Param("params") FtbCultivateStatisticsDTO dto);

    /**
     * 计算课程完成率
     * @param dto 统计参数封装对象
     * @param states 课程的状态列表，用于计算完成率
     * @return 课程完成率
     */
    Integer courseCompletionRate(@Param("params") FtbCultivateStatisticsDTO dto, @Param("states") List<Integer> states);

    /**
     * 获取学习进度排名靠前的成员列表
     * @param dto 统计参数封装对象
     * @return 学习进度排名靠前的成员列表
     */
    List<FtbCultivateStatisticsVO.TopMembers> getTopMembers(@Param("params") FtbCultivateStatisticsDTO dto);

    /**
     * 统计新学习的课程数量
     * @param dto 统计参数封装对象
     * @return 新学习的课程数量
     */
    Integer numberOfStudyCoursesNew(@Param("params") FtbCultivateStatisticsDTO dto);

    V2CultivateLineNumDto queryStudyUserNumAndTime(@Param("params") FtbCultivateStatisticsDTO params);
    V2CultivateLineNumDto queryStudyUserNumAndTimeV2(@Param("params") FtbCultivateStatisticsDTO params);

    Integer numOfTraineesV2(@Param("params") FtbCultivateStatisticsDTO dto);

    Integer numberOfStudyCoursesV2(@Param("params") FtbCultivateStatisticsDTO dto);
    Integer accumulatedTimeV2(@Param("params") FtbCultivateStatisticsDTO dto);

    Integer courseCompletionRateV2(@Param("params") FtbCultivateStatisticsDTO dto, @Param("states") List<Integer> states);

    List<FtbCultivateStatisticsVO.TopMembers> getTopMembersV2(@Param("params") FtbCultivateStatisticsDTO dto);


}
