package com.snack.server.module.category.service;

import com.snack.server.module.category.dto.req.CategorySaveReq;
import com.snack.server.module.category.entity.Category;
import com.snack.server.module.category.vo.CategoryOptionVO;
import com.snack.server.module.category.vo.CategoryTreeVO;

import java.util.List;

/**
 * 商品分类业务接口
 */
public interface CategoryService {

    /**
     * 获取分类树（全量）
     *
     * @param statusFilter null-全部 0-禁用 1-启用
     */
    List<CategoryTreeVO> listTree(Integer statusFilter);

    /**
     * 获取子分类（按父 ID 查直接子节点）
     */
    List<Category> listByParentId(Long parentId);

    /**
     * 获取下拉选项（仅启用状态）
     */
    List<CategoryOptionVO> listOptions();

    /**
     * 获取分类详情
     */
    Category getById(Long id);

    /**
     * 创建分类
     */
    Long create(CategorySaveReq req);

    /**
     * 更新分类
     */
    void update(CategorySaveReq req);

    /**
     * 删除分类（级联校验：有商品/子分类则禁止删除）
     */
    void delete(Long id);

    /**
     * 启用 / 禁用
     */
    void updateStatus(Long id, Integer status);

    /**
     * 调整排序
     */
    void updateSort(Long id, Integer sort);

    /**
     * 更新分类图标
     */
    void updateIcon(Long id, String iconUrl);
}
