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.TbLearningRecord;

import java.util.List;

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

    /**
     * @description 查询学习记录列表
     * @param filter 过滤条件
     * @return List<TbLearningRecord> 学习记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningRecord> selectLearningRecords(TbLearningRecord filter);

    /**
     * @description 根据记录ID查询记录信息
     * @param recordId 记录ID
     * @return TbLearningRecord 记录信息
     * @author yslg
     * @since 2025-10-15
     */
    TbLearningRecord selectByRecordId(@Param("recordId") String recordId);

    /**
     * @description 根据用户ID查询学习记录列表
     * @param userId 用户ID
     * @return List<TbLearningRecord> 学习记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningRecord> selectByUserId(@Param("userId") String userId);

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

    /**
     * @description 根据用户ID和课程ID查询学习记录
     * @param userId 用户ID
     * @param courseId 课程ID
     * @return TbLearningRecord 学习记录
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningRecord> selectByUserIdAndCourseId(@Param("userId") String userId, @Param("courseId") String courseId);

    /**
     * @description 根据状态查询学习记录列表
     * @param status 状态
     * @return List<TbLearningRecord> 学习记录列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbLearningRecord> selectByStatus(@Param("status") Integer status);

    /**
     * @description 查询用户学习统计信息
     * @param userId 用户ID
     * @return TbLearningRecord 统计信息
     * @author yslg
     * @since 2025-10-15
     */
    TbLearningRecord selectLearningStatistics(@Param("userId") String userId);

    /**
     * @description 插入学习记录
     * @param learningRecord 学习记录
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertLearningRecord(TbLearningRecord learningRecord);

    /**
     * @description 更新学习记录
     * @param learningRecord 学习记录
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateLearningRecord(TbLearningRecord learningRecord);

    /**
     * @description 删除学习记录
     * @param learningRecord 学习记录
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteLearningRecord(@Param("recordId") String recordId);

    /**
     * @description 批量插入学习记录
     * @param learningRecordList 学习记录列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertLearningRecords(@Param("learningRecordList") List<TbLearningRecord> learningRecordList);

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

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

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