package jnpf.cultivate.service;

import jnpf.model.cultivate.dto.statistics.FtbCultivateStatisticsDTO;
import jnpf.model.cultivate.vo.statistics.FtbCultivateStatisticsVO;
import jnpf.model.cultivate.vo.statistics.NumberOfTrainingSessions;
import jnpf.model.cultivate.vo.statistics.NumberofAppSessions;

import java.util.List;

public interface FtbCultivateStatisticsService {
    /**
     * 获取培训课程的统计数据
     *
     * @param dto 包含统计条件的DTO对象
     * @return 返回一个NumberOfTrainingSessions对象，包含培训课程的数量统计信息
     */
    NumberOfTrainingSessions getNumberOfTraineesStatistics(FtbCultivateStatisticsDTO dto);

    /**
     * 获取热门课程列表
     *
     * @param dto 包含统计条件的DTO对象
     * @return 返回一个包含受欢迎课程的List，每个课程的信息封装在FtbCultivateStatisticsVO.PopularCourses对象中
     */
    List<FtbCultivateStatisticsVO.PopularCourses> getPopularCourses(FtbCultivateStatisticsDTO dto);

    /**
     * 获取累积学习者数量的折线图数据
     *
     * @param dto 包含统计条件的DTO对象
     * @return 返回一个List，包含FtbCultivateStatisticsVO.LineChartCumulativeLearners对象，每个对象包含折线图的一个数据点
     */
    List<FtbCultivateStatisticsVO.LineChartCumulativeLearners> numberOfStudentsLineGraph(FtbCultivateStatisticsDTO dto);

    /**
     * 获取排名靠前的成员列表
     *
     * @param dto         包含统计条件的DTO对象
     * @param rankingType 排名类型，可能影响排名的逻辑
     * @return 返回一个List，包含FtbCultivateStatisticsVO.TopMembers对象，每个对象代表一个排名靠前的成员
     */
    List<FtbCultivateStatisticsVO.TopMembers> getTopMembers(FtbCultivateStatisticsDTO dto, Integer rankingType);

    NumberofAppSessions trainingStatisticsV2(FtbCultivateStatisticsDTO dto);

    /**
     * 获取培训课程的会话统计数据
     *
     * @param dto 包含统计条件的DTO对象
     * @return 返回一个List，包含NumberofAppSessions对象，每个对象代表一个培训课程的会话统计数据
     */
    List<NumberofAppSessions> trainingStatistics(FtbCultivateStatisticsDTO dto);

}
