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

import java.util.List;

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

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

    /**
     * @description 根据资源ID查询资源信息
     * @param resourceId 资源ID
     * @return TbResource 资源信息
     * @author yslg
     * @since 2025-10-15
     */
    TbResource selectByResourceId(@Param("resourceId") String resourceId);

    /**
     * @description 根据分类ID查询资源列表
     * @param categoryId 分类ID
     * @return List<TbResource> 资源列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResource> selectByCategoryId(@Param("categoryId") String categoryId);

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

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

    /**
     * @description 查询热门资源列表
     * @param limit 限制数量
     * @return List<TbResource> 资源列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResource> selectHotResources(@Param("limit") Integer limit);

    /**
     * @description 查询最新资源列表
     * @param limit 限制数量
     * @return List<TbResource> 资源列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResource> selectLatestResources(@Param("limit") Integer limit);

    /**
     * @description 根据关键词搜索资源
     * @param keyword 关键词
     * @return List<TbResource> 资源列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbResource> searchByKeyword(@Param("keyword") String keyword);

    /**
     * @description 检查资源标题是否存在
     * @param title 资源标题
     * @param excludeId 排除的资源ID（用于更新时排除自身）
     * @return int 存在的数量
     * @author yslg
     * @since 2025-10-15
     */
    int countByTitle(@Param("title") String title, @Param("excludeId") String excludeId);

    /**
     * @description 插入资源
     * @param resource 资源
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertResource(TbResource resource);

    /**
     * @description 更新资源
     * @param resource 资源
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateResource(TbResource resource);

    /**
     * @description 删除资源
     * @param resource 资源
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteResource(TbResource resource);

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

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

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

    /**
     * @description 统计资源总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countResources(TbResource filter);

    /**
     * @description 更新资源收藏次数
     * @param resourceID 资源ID
     * @param collectionValue 收藏次数
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateResourceCollectCount(@Param("resourceID") String resourceID, @Param("collectionValue") Integer collectionValue);

    /**
     * @description 增加资源浏览次数
     * @param resourceID 资源ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int incrementViewCount(@Param("resourceID") String resourceID);
}
