package org.xyzh.news.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.resource.TbResourceCategory;

import java.util.List;

/**
 * @description ResourceCategoryMapper.java文件描述 资源分类数据访问层
 * @filename ResourceCategoryMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface ResourceCategoryMapper extends BaseMapper<TbResourceCategory> {

    /**
     * @description 查询资源分类列表
     * @param filter 过滤条件
     * @return List<TbResourceCategory> 资源分类列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceCategory> selectResourceCategories(TbResourceCategory filter);

    /**
     * @description 根据分类ID查询分类信息
     * @param categoryId 分类ID
     * @return TbResourceCategory 分类信息
     * @author yslg
     * @since 2025-10-15
     */
    TbResourceCategory selectByCategoryId(@Param("categoryId") String categoryId);

    /**
     * @description 根据父分类ID查询子分类列表
     * @param parentId 父分类ID
     * @return List<TbResourceCategory> 子分类列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceCategory> selectByParentId(@Param("parentId") String parentId);

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

    /**
     * @description 查询分类树结构
     * @return List<TbResourceCategory> 分类树
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceCategory> selectCategoryTree();

    /**
     * @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 resourceCategory 资源分类
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertResourceCategory(TbResourceCategory resourceCategory);

    /**
     * @description 更新资源分类
     * @param resourceCategory 资源分类
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateResourceCategory(TbResourceCategory resourceCategory);

    /**
     * @description 删除资源分类
     * @param resourceCategory 资源分类
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteResourceCategory(TbResourceCategory resourceCategory);

    /**
     * @description 批量插入资源分类
     * @param resourceCategoryList 资源分类列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertResourceCategories(@Param("resourceCategoryList") List<TbResourceCategory> resourceCategoryList);

    /**
     * @description 批量删除资源分类
     * @param ids 分类ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteResourceCategories(@Param("ids") List<String> ids);

    /**
     * @description 分页查询资源分类
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbResourceCategory> 资源分类列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResourceCategory> selectResourceCategoriesPage(@Param("filter") TbResourceCategory filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计资源分类总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countResourceCategories(@Param("filter") TbResourceCategory filter);
}
