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

import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yhy.module.core.dal.dataobject.infoprice.InfoPriceTreeDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 信息价树结构 Mapper
 *
 * @author yhy
 */
@Mapper
public interface InfoPriceTreeMapper extends BaseMapperX<InfoPriceTreeDO> {

    /**
     * 根据枚举类型查询树结构
     *
     * @param enumType 枚举类型
     * @return 树节点列表
     */
    default List<InfoPriceTreeDO> selectListByEnumType(String enumType) {
        return selectList(new LambdaQueryWrapperX<InfoPriceTreeDO>()
                .eq(InfoPriceTreeDO::getEnumType, enumType)
                .orderByAsc(InfoPriceTreeDO::getSortOrder));
    }

    /**
     * 根据父节点ID查询子节点
     *
     * @param parentId 父节点ID
     * @return 子节点列表
     */
    default List<InfoPriceTreeDO> selectListByParentId(Long parentId) {
        return selectList(new LambdaQueryWrapperX<InfoPriceTreeDO>()
                .eq(InfoPriceTreeDO::getParentId, parentId)
                .orderByAsc(InfoPriceTreeDO::getSortOrder));
    }

    /**
     * 根据编码查询节点
     *
     * @param tenantId 租户ID
     * @param enumType 枚举类型
     * @param code 编码
     * @return 节点
     */
    default InfoPriceTreeDO selectByCode(Long tenantId, String enumType, String code) {
        return selectOne(new LambdaQueryWrapperX<InfoPriceTreeDO>()
                .eq(InfoPriceTreeDO::getTenantId, tenantId)
                .eq(InfoPriceTreeDO::getEnumType, enumType)
                .eq(InfoPriceTreeDO::getCode, code));
    }

    /**
     * 统计子节点数量
     *
     * @param parentId 父节点ID
     * @return 子节点数量
     */
    default Long countByParentId(Long parentId) {
        return selectCount(new LambdaQueryWrapperX<InfoPriceTreeDO>()
                .eq(InfoPriceTreeDO::getParentId, parentId));
    }
}
