package jnpf.cultivate.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.model.cultivate.dto.course.FtbCultivateCourseOrgStatisticsDTO;
import jnpf.model.cultivate.dto.course.FtbCultivateCoursePersonStatisticesDTO;
import jnpf.model.cultivate.v2.course.web.vo.V2InnerCultivateChapterStatisticsDto;
import jnpf.model.cultivate.v2.course.web.vo.V2InnerCultivateCourseOrgStatisticsDto;
import jnpf.model.cultivate.vo.course.web.FtbCultivateCourseOrgStatisticesVO;
import jnpf.model.cultivate.vo.course.web.FtbCultivateCoursePersonStatisticesVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FtbCultivateCourseStatisticesMapper {
    /**
     * 组织列表统计方法
     * 对给定的统计参数进行组织列表的相关统计分析，并返回统计结果列表
     *
     * @param statisticDTO 统计参数，包含了需要进行统计的组织相关的信息
     * @return 返回一个包含组织统计结果的列表
     */
    List<FtbCultivateCourseOrgStatisticesVO> organizationListStatistics(
            @Param("params") FtbCultivateCourseOrgStatisticsDTO statisticDTO);

    /**
     * 人员列表统计方法
     * 根据给定的分页参数和统计参数，对人员列表进行相关的统计分析，并返回分页统计结果
     *
     * @param page   分页参数，包含了分页信息如当前页码和每页大小
     * @param params 统计参数，包含了需要进行统计的人员相关的信息
     * @return 返回一个分页的人员统计结果
     */
    Page<FtbCultivateCoursePersonStatisticesVO> personListStatistics(@Param("page") Page<FtbCultivateCoursePersonStatisticesVO> page,
                                                                     @Param("params") FtbCultivateCoursePersonStatisticesDTO params);

    /**
     * 课程信息查询方法
     * 根据给定的课程ID列表，查询并返回相关的课程统计信息
     *
     * @param courseIds 课程ID列表，包含了需要查询的课程的唯一标识
     * @return 返回一个包含课程统计信息的列表
     */
    List<FtbCultivateCoursePersonStatisticesVO> courseInfo(@Param("courseIds") List<String> courseIds);

    /**
     * 学习章节数量统计方法
     * 统计特定用户在特定课程中的学习章节数量
     *
     * @param courseId 课程ID，标识了需要统计的课程
     * @param userId   用户ID，标识了需要统计的用户
     * @param type     统计类型，不同的类型可能影响统计的方式或结果
     * @return 返回特定用户在特定课程中的学习章节数量
     */
    Integer numberOfStudyChapters(@Param("courseId") String courseId, @Param("userId") String userId,
                                  @Param("type") Integer type);
    /**
     * 组织维度统计方法
     * 根据给定的统计参数，对组织维度进行相关的统计分析，并返回统计结果列表
     *
     * @param params 统计参数，包含了需要进行统计的组织相关的信息
     * @return 返回一个包含组织统计结果的列表
     */
    List<V2InnerCultivateCourseOrgStatisticsDto> organizationListStatisticsV2(@Param("params") FtbCultivateCourseOrgStatisticsDTO params);

    /**
     * 人员维度统计方法
     * 根据给定的用户ID列表和状态列表，对人员维度进行相关的统计分析，并返回统计结果列表
     *
     * @param userIds 用户ID列表，标识了需要统计的用户
     * @param state   状态列表，标识了需要统计的用户的当前状态
     * @return 返回一个包含人员统计结果的列表
     */
    List<V2InnerCultivateChapterStatisticsDto> personListStatisticsV2(@Param("userIds") List<String> userIds,@Param("state") List<Integer> state);
}
