package cn.lili.modules.goods.service;


import cn.lili.modules.goods.entity.dos.Category;
import cn.lili.modules.goods.entity.vos.CategoryVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 商品分类业务层
 *
 * @author pikachu
 * @since 2020-03-02 16:44:56
 */
public interface CategoryService extends IService<Category> {


    /**
     * 管理端获取所有分类
     * 即获取的对象不管是否删除，都要展示，而且不从缓存获取，保证内容是最新的
     *
     * @param parentId 分类父ID
     * @return 商品分类列表
     */
    List<Category> dbList(String parentId);

    /**
     * 根据分类id集合获取所有分类根据层级排序
     *
     * @param ids 分类ID集合
     * @return 商品分类列表
     */
    List<Category> listByIdsOrderByLevel(List<String> ids);

    /**
     * 获取分类树
     *
     * @return 分类树
     */
    List<CategoryVO> categoryTree();

    /**
     * 查询所有的分类，父子关系
     *
     * @param parentId 分类父ID
     * @return 所有的分类，父子关系
     */
    List<CategoryVO> listAllChildren(String parentId);

    /**
     * 查询所有的分类，父子关系
     * 数据库获取
     *
     * @return 所有的分类，父子关系
     */
    List<CategoryVO> listAllChildren();

    /**
     * 获取指定分类的分类名称
     *
     * @param ids 指定分类id集合
     * @return 分类名称集合
     */
    List<String> getCategoryNameByIds(List<String> ids);

    /**
     * 获取商品分类list
     *
     * @param category 分类
     * @return 商品分类list
     */
    List<Category> findByAllBySortOrder(Category category);

    /**
     * 添加商品分类
     *
     * @param category 商品分类信息
     * @return 添加结果
     */
    boolean saveCategory(Category category);

    /**
     * 修改商品分类
     *
     * @param category 商品分类信息
     * @return 修改结果
     */
    void updateCategory(Category category);

    /**
     * 批量删除分类
     *
     * @param id 分类ID
     */
    void delete(String id);

    /**
     * 分类状态的更改
     *
     * @param categoryId       商品分类ID
     * @param enableOperations 是否可用
     */
    void updateCategoryStatus(String categoryId, Boolean enableOperations);

    /**
     * 获取商家经营类目
     *
     * @param categories 经营范围
     * @return 分类VO列表
     */
    List<CategoryVO> getStoreCategory(String[] categories);

    /**
     * 获取一级分类列表
     * 用于商家入驻选择
     *
     * @return 分类列表
     */
    List<Category> firstCategory();

}