package org.xyzh.api.news.recommend;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.resource.TbResourceRecommend;

import java.util.List;

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

    /**
     * @description 获取推荐资源列表
     * @return ResultDomain<TbResourceRecommend> 推荐资源列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceRecommend> getRecommendList();

    /**
     * @description 添加推荐资源
     * @param recommend 推荐信息
     * @return ResultDomain<TbResourceRecommend> 添加结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceRecommend> addRecommend(TbResourceRecommend recommend);

    /**
     * @description 更新推荐资源
     * @param recommend 推荐信息
     * @return ResultDomain<TbResourceRecommend> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceRecommend> updateRecommend(TbResourceRecommend recommend);

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

    /**
     * @description 更新推荐排序
     * @param resourceID 资源ID
     * @param orderNum 排序号
     * @return ResultDomain<TbResourceRecommend> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceRecommend> updateRecommendOrder(String resourceID, Integer orderNum);

    /**
     * @description 更新推荐理由
     * @param resourceID 资源ID
     * @param reason 推荐理由
     * @return ResultDomain<TbResourceRecommend> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceRecommend> updateRecommendReason(String resourceID, String reason);

    /**
     * @description 检查资源是否已推荐
     * @param resourceID 资源ID
     * @return ResultDomain<Boolean> 是否已推荐
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> isResourceRecommended(String resourceID);

    /**
     * @description 批量添加推荐资源
     * @param resourceIDs 资源ID列表
     * @param reason 推荐理由
     * @return ResultDomain<TbResourceRecommend> 添加结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceRecommend> batchAddRecommends(List<String> resourceIDs, String reason);

    /**
     * @description 批量移除推荐资源
     * @param resourceIDs 资源ID列表
     * @return ResultDomain<Boolean> 移除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> batchRemoveRecommends(List<String> resourceIDs);

    /**
     * @description 获取推荐资源详情
     * @param recommendID 推荐ID
     * @return ResultDomain<TbResourceRecommend> 推荐详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceRecommend> getRecommendDetail(String recommendID);
}
