package org.xyzh.api.news.resource;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.resource.TbResource;
import org.xyzh.common.dto.usercenter.TbUserCollection;
import org.xyzh.common.vo.ResourceVO;

import java.util.List;

/**
 * @description 资源服务接口
 * @filename ResourceService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface ResourceService {

    /**
     * @description 获取资源列表
     * @param filter 过滤条件
     * @return ResultDomain<TbResource> 资源列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> getResourceList(TbResource filter);

    /**
     * @description 获取资源分页
     * @param filter 过滤条件
     * @return ResultDomain<TbResource> 资源分页
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> getResourcePage(TbResource filter, PageParam pageParam);

    /**
     * @description 根据ID获取资源详情
     * @param resourceID 资源ID
     * @return ResultDomain<TbResource> 资源详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<ResourceVO> getResourceById(String resourceID);

    /**
     * @description 创建资源
     * @param resource 资源信息
     * @return ResultDomain<TbResource> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<ResourceVO> createResource(ResourceVO resource);

    /**
     * @description 更新资源
     * @param resource 资源信息
     * @return ResultDomain<TbResource> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<ResourceVO> updateResource(ResourceVO resource);

    /**
     * @description 删除资源
     * @param resourceID 资源ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteResource(String resourceID);

    /**
     * @description 更新资源状态
     * @param resourceID 资源ID
     * @param status 状态
     * @return ResultDomain<TbResource> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> updateResourceStatus(String resourceID, Integer status);

    /**
     * @description 发布资源
     * @param resourceID 资源ID
     * @return ResultDomain<TbResource> 发布结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> publishResource(String resourceID);

    /**
     * @description 下架资源
     * @param resourceID 资源ID
     * @return ResultDomain<TbResource> 下架结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> unpublishResource(String resourceID);

    /**
     * @description 增加浏览次数
     * @param resourceID 资源ID
     * @return ResultDomain<TbResource> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> incrementViewCount(String resourceID);

    /**
     * @description 增加点赞次数
     * @param resourceID 资源ID
     * @return ResultDomain<TbResource> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> incrementLikeCount(String resourceID);

    /**
     * @description 收藏次数加减
     * @param resourceID 资源ID
     * @return ResultDomain<TbResource> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> resourceCollect(TbUserCollection collection);

    /**
     * @description 设置资源推荐
     * @param resourceID 资源ID
     * @param isRecommend 是否推荐
     * @return ResultDomain<TbResource> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> setResourceRecommend(String resourceID, Boolean isRecommend);

    /**
     * @description 设置资源轮播
     * @param resourceID 资源ID
     * @param isBanner 是否轮播
     * @return ResultDomain<TbResource> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> setResourceBanner(String resourceID, Boolean isBanner);

    /**
     * @description 获取推荐资源列表
     * @param limit 限制数量
     * @return ResultDomain<TbResource> 推荐资源列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> getRecommendResources(Integer limit);

    /**
     * @description 获取轮播资源列表
     * @param limit 限制数量
     * @return ResultDomain<TbResource> 轮播资源列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> getBannerResources(Integer limit);

    /**
     * @description 搜索资源
     * @param keyword 关键词
     * @param categoryID 分类ID（可选）
     * @param status 状态（可选）
     * @return ResultDomain<TbResource> 搜索结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResource> searchResources(String keyword, String categoryID, Integer status);
}
