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

import java.util.List;

/**
 * @description CourseChapterMapper.java文件描述 课程章节数据访问层
 * @filename CourseChapterMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface CourseChapterMapper extends BaseMapper<TbCourseChapter> {

    /**
     * @description 查询课程章节列表
     * @param filter 过滤条件
     * @return List<TbCourseChapter> 课程章节列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbCourseChapter> selectCourseChapters(TbCourseChapter filter);

    /**
     * @description 根据章节ID查询章节信息
     * @param chapterId 章节ID
     * @return TbCourseChapter 章节信息
     * @author yslg
     * @since 2025-10-15
     */
    TbCourseChapter selectByChapterId(@Param("chapterId") String chapterId);

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

    /**
     * @description 根据章节名称查询章节
     * @param name 章节名称
     * @return TbCourseChapter 章节信息
     * @author yslg
     * @since 2025-10-15
     */
    TbCourseChapter selectByName(@Param("name") String name);

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

    /**
     * @description 根据课程ID和排序查询章节列表
     * @param courseId 课程ID
     * @return List<TbCourseChapter> 章节列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbCourseChapter> selectByCourseIdOrderBySort(@Param("courseId") String courseId);

    /**
     * @description 检查章节名称是否存在
     * @param name 章节名称
     * @param excludeId 排除的章节ID（用于更新时排除自身）
     * @return int 存在的数量
     * @author yslg
     * @since 2025-10-15
     */
    int countByName(@Param("name") String name, @Param("excludeId") String excludeId);

    /**
     * @description 插入课程章节
     * @param courseChapter 课程章节
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertCourseChapter(TbCourseChapter courseChapter);

    /**
     * @description 更新课程章节
     * @param courseChapter 课程章节
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateCourseChapter(TbCourseChapter courseChapter);

    /**
     * @description 删除课程章节
     * @param courseChapter 课程章节
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteCourseChapter(TbCourseChapter courseChapter);

    /**
     * @description 批量插入课程章节
     * @param courseChapterList 课程章节列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertCourseChapters(@Param("courseChapterList") List<TbCourseChapter> courseChapterList);

    /**
     * @description 批量删除课程章节
     * @param ids 章节ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteCourseChapters(@Param("ids") List<String> ids);

    /**
     * @description 根据课程ID批量删除章节
     * @param courseId 课程ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteByCourseId(@Param("courseId") String courseId);

    /**
     * @description 分页查询课程章节
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbCourseChapter> 课程章节列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbCourseChapter> selectCourseChaptersPage(@Param("filter") TbCourseChapter filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计课程章节总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countCourseChapters(@Param("filter") TbCourseChapter filter);
}
