package com.yc.ship.module.resource.service.category;

import cn.hutool.core.lang.tree.TreeNode;
import com.yc.ship.framework.common.pojo.PageResult;
import com.yc.ship.module.resource.controller.admin.category.vo.CategoryListReqVO;
import com.yc.ship.module.resource.controller.admin.category.vo.CategoryPageReqVO;
import com.yc.ship.module.resource.controller.admin.category.vo.CategoryRespVO;
import com.yc.ship.module.resource.controller.admin.category.vo.CategorySaveReqVO;
import com.yc.ship.module.resource.controller.admin.vo.AppCategoryReqVO;
import com.yc.ship.module.resource.controller.admin.vo.AppCategoryRespVO;
import com.yc.ship.module.resource.dal.dataobject.category.CategoryDO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;


/**
 * 资源-产品分类 Service 接口
 *
 * @author 管理员
 */
public interface CategoryService {

    /**
     * 创建资源-产品分类
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCategory(@Valid CategorySaveReqVO createReqVO);

    /**
     * 更新资源-产品分类
     *
     * @param updateReqVO 更新信息
     */
    void updateCategory(@Valid CategorySaveReqVO updateReqVO);

    /**
     * 删除资源-产品分类
     *
     * @param id 编号
     */
    void deleteCategory(Long id);

    /**
     * 获得资源-产品分类
     *
     * @param id 编号
     * @return 资源-产品分类
     */
    CategoryDO getCategory(Long id);

    /**
     * 获得资源-产品分类
     *
     * @param id 编号
     * @return 资源-产品分类
     */
    CategoryRespVO getCategoryExtra(Long id);

    /**
     * 获得资源-产品分类分页
     *
     * @param pageReqVO 分页查询
     * @return 资源-产品分类分页
     */
    PageResult<CategoryDO> getCategoryPage(CategoryPageReqVO pageReqVO);

    /**
     * 获得资源-产品分类分页
     *
     * @param pageReqVO 分页查询
     * @return 资源-产品分类分页
     */
    PageResult<CategoryRespVO> selectCategoryPage(CategoryPageReqVO pageReqVO);

    List<TreeNode> getCategoryTreeList(CategoryListReqVO type);
    //获取平台所有分销商分组
    List<TreeNode> getPlatAllCategoryTreeList(CategoryListReqVO type);

    List<Map<String,Object>> getPlatAllTenantId(Long tenantId);

    List<CategoryDO> getCategoryList(CategoryListReqVO reqVO);

    List<CategoryRespVO> selectListWithSupplierNum(CategoryPageReqVO reqVO);

    List<CategoryRespVO> selectListByCatalogues(Long catalogues,Integer businessType);

    List<AppCategoryRespVO> getCategoryList(AppCategoryReqVO reqVO);

    /**
     * 根据选中的分类ID递归查询当前分类和所有子分类
     * @param reqVO
     * @return
     */
    List<Map<String,Object>> getCategoryExtraList(AppCategoryReqVO reqVO);

    List<CategoryRespVO> getListByIds(CategoryListReqVO reqVO);
    List<CategoryRespVO> getCategoryRespListByIds(Long id);

    List<CategoryDO> getListByIds(List<Long> ids);
}
