package com.jeesharp.business.modules.mall.service;

import com.jeesharp.business.modules.mall.entity.MallCategory;
import com.jeesharp.business.modules.mall.vo.MallCategoryQueryVO;
import com.jeesharp.framework.mybatis.core.service.BaseInterface;

import java.util.List;

/**
 * 商品分类 Service 接口
 */
public interface MallCategoryService extends BaseInterface<MallCategory, MallCategoryQueryVO> {

    List<MallCategory> listEnabledForPortal();

    void createCategory(MallCategory entity);

    void updateCategory(MallCategory entity);
/**
     * 查询绑定了指定发布模板的类目（未删除，按排序与创建时间）。
     */
    List<MallCategory> listByTemplateId(String templateId);

    /**
     * 查询绑定了任一发布模板的类目（未删除），用于模板列表展示绑定类目。
     */
    List<MallCategory> listByTemplateIds(List<String> templateIds);

    /**
     * 按主键批量查询类目（未删除，平台主数据租户）。
     */
    List<MallCategory> listByIds(List<String> ids);

    /**
     * 平台已启用类目全量列表（商户建品、类目树下拉）。
     */
    List<MallCategory> listPlatformEnabledForPublish();

    /**
     * 是否存在以 {@code parentId} 为父级的未删除子类目；用于判断是否为末级类目（无子级）。
     *
     * @param parentId 父类目主键
     * @return 存在子类目则为 {@code true}
     */
    boolean hasChildCategory(String parentId);

    /**
     * C 端按类目筛商品：返回自身及全部启用子类目主键（含多级）。
     */
    List<String> listSelfAndDescendantIds(String categoryId);

    /**
     * 解析类目应使用的发布模板主键：自当前节点起，若本节点未绑定则沿 {@code parentId} 向上查找，直至根或找到非空
     * {@link MallCategory#getTemplateId()}。
     * <p>与商品编辑页「按所选类目解析模板」、SPU 保存校验共用，避免仅父级绑模板而末级类目 {@code template_id} 为空时无法解析。</p>
     *
     * @param categoryId 类目主键（通常为末级）
     * @return 模板 ID；整条链上均未绑定则返回 {@code null} 或空串
     */
    String resolveInheritedTemplateId(String categoryId);
}
