package com.yhy.module.core.dal.mysql.quota;

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import com.yhy.module.core.dal.dataobject.quota.QuotaCatalogItemDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 定额目录条目 Mapper
 * 
 * @author yhy
 */
@Mapper
public interface QuotaCatalogItemMapper extends BaseMapperX<QuotaCatalogItemDO> {

    /**
     * 根据父节点ID查询子节点列表
     */
    default List<QuotaCatalogItemDO> selectListByParentId(Long parentId) {
        return selectList(QuotaCatalogItemDO::getParentId, parentId);
    }

    /**
     * 根据 categoryTreeId 查询已绑定的定额专业节点
     */
    default QuotaCatalogItemDO selectByCategoryTreeId(Long categoryTreeId) {
        return selectOne(QuotaCatalogItemDO::getCategoryTreeId, categoryTreeId);
    }

    /**
     * 查询根节点列表（parentId 为 null）
     */
    default List<QuotaCatalogItemDO> selectRootList() {
        return selectList("parent_id", null);
    }

    /**
     * 根据编码查询
     */
    default QuotaCatalogItemDO selectByCode(String code) {
        return selectOne(QuotaCatalogItemDO::getCode, code);
    }

    /**
     * 检查节点是否有子节点
     */
    default boolean hasChildren(Long id) {
        return selectCount(QuotaCatalogItemDO::getParentId, id) > 0;
    }

    /**
     * 批量查询子孙节点（通过 path 数组包含查询）
     * 
     * @param id 节点ID
     * @return 所有子孙节点
     */
    List<QuotaCatalogItemDO> selectDescendants(@Param("id") Long id);
}
