package org.xyzh.study.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.study.TbLearningStatistics;

import java.util.List;

/**
 * @description LearningStatisticsMapper.java文件描述 学习统计数据访问层
 * @filename LearningStatisticsMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface LearningStatisticsMapper extends BaseMapper<TbLearningStatistics> {

    /**
     * @description 查询学习统计列表
     * @param filter 过滤条件
     * @return List<TbLearningStatistics> 学习统计列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningStatistics> selectLearningStatistics(TbLearningStatistics filter);

    /**
     * @description 根据统计ID查询统计信息
     * @param statisticsId 统计ID
     * @return TbLearningStatistics 统计信息
     * @author yslg
     * @since 2025-10-15
     */
    TbLearningStatistics selectByStatisticsId(@Param("statisticsId") String statisticsId);

    /**
     * @description 根据用户ID查询学习统计
     * @param userId 用户ID
     * @return TbLearningStatistics 学习统计
     * @author yslg
     * @since 2025-10-15
     */
    TbLearningStatistics selectByUserId(@Param("userId") String userId);

    /**
     * @description 根据课程ID查询学习统计列表
     * @param courseId 课程ID
     * @return List<TbLearningStatistics> 学习统计列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningStatistics> selectByCourseId(@Param("courseId") String courseId);

    /**
     * @description 根据用户ID和课程ID查询学习统计
     * @param userId 用户ID
     * @param courseId 课程ID
     * @return TbLearningStatistics 学习统计
     * @author yslg
     * @since 2025-10-15
     */
    TbLearningStatistics selectByUserIdAndCourseId(@Param("userId") String userId, @Param("courseId") String courseId);

    /**
     * @description 根据统计类型查询学习统计列表
     * @param type 统计类型
     * @return List<TbLearningStatistics> 学习统计列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningStatistics> selectByType(@Param("type") Integer type);

    /**
     * @description 查询用户学习排行榜
     * @param limit 限制数量
     * @return List<TbLearningStatistics> 学习统计列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningStatistics> selectLearningRanking(@Param("limit") Integer limit);

    /**
     * @description 插入学习统计
     * @param learningStatistics 学习统计
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertLearningStatistics(TbLearningStatistics learningStatistics);

    /**
     * @description 更新学习统计
     * @param learningStatistics 学习统计
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateLearningStatistics(TbLearningStatistics learningStatistics);

    /**
     * @description 删除学习统计
     * @param learningStatistics 学习统计
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteLearningStatistics(TbLearningStatistics learningStatistics);

    /**
     * @description 批量插入学习统计
     * @param learningStatisticsList 学习统计列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertLearningStatistics(@Param("learningStatisticsList") List<TbLearningStatistics> learningStatisticsList);

    /**
     * @description 批量删除学习统计
     * @param ids 统计ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteLearningStatistics(@Param("ids") List<String> ids);

    /**
     * @description 分页查询学习统计
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbLearningStatistics> 学习统计列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningStatistics> selectLearningStatisticsPage(@Param("filter") TbLearningStatistics filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计学习统计总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countLearningStatistics(@Param("filter") TbLearningStatistics filter);
}
