package org.xyzh.api.news.category;

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

import java.util.List;

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

    /**
     * @description 获取所有分类列表
     * @return ResultDomain<TbResourceCategory> 分类列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceCategory> getAllCategories();

    /**
     * @description 获取分类树形结构
     * @return ResultDomain<TbResourceCategory> 分类树
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceCategory> getCategoryTree();

    /**
     * @description 根据ID获取分类详情
     * @param categoryID 分类ID
     * @return ResultDomain<TbResourceCategory> 分类详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceCategory> getCategoryById(String categoryID);

    /**
     * @description 根据父ID获取子分类
     * @param parentID 父分类ID
     * @return ResultDomain<TbResourceCategory> 子分类列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceCategory> getCategoriesByParent(String parentID);

    /**
     * @description 创建分类
     * @param category 分类信息
     * @return ResultDomain<TbResourceCategory> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceCategory> createCategory(TbResourceCategory category);

    /**
     * @description 更新分类
     * @param category 分类信息
     * @return ResultDomain<TbResourceCategory> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceCategory> updateCategory(TbResourceCategory category);

    /**
     * @description 删除分类
     * @param categoryID 分类ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteCategory(String categoryID);

    /**
     * @description 更新分类排序
     * @param categoryID 分类ID
     * @param orderNum 排序号
     * @return ResultDomain<TbResourceCategory> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbResourceCategory> updateCategoryOrder(String categoryID, Integer orderNum);

    /**
     * @description 检查分类是否有子分类
     * @param categoryID 分类ID
     * @return ResultDomain<Boolean> 是否有子分类
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> hasChildCategories(String categoryID);

    /**
     * @description 检查分类下是否有资源
     * @param categoryID 分类ID
     * @return ResultDomain<Boolean> 是否有资源
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> hasResources(String categoryID);
}
