package com.hotent.baseInfo.dao;

import com.hotent.baseInfo.model.CostCatalog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 成本监审目录表 Mapper 接口
 *
 * @author 超级管理员
 * @since 2025-09-04
 */
public interface CostCatalogDao extends BaseMapper<CostCatalog> {

    /**
     * 查询所有目录（包含树形结构）
     * @return 目录列表
     */
    List<CostCatalog> selectAllCatalogs();


    /**
     * 根据ID查询子节点
     * @param catalogId 目录ID
     * @return 子节点列表
     */
    List<CostCatalog> selectChildrenById(@Param("catalogId") String catalogId);


    /**
     * 批量更新子节点
     * @param costCatalogs 子节点列表
     * @return 更新数量
     */
    public int updateChildren(@Param("costCatalogs") List<CostCatalog> costCatalogs);

    /**
     * 根据父节点ID查询子节点
     * @param parentId 父节点ID
     * @return 子节点列表
     */
    List<CostCatalog> selectByParentId(@Param("parentId") String parentId);

    /**
     * 查询最大编码（用于生成新编码）
     * @param parentId 父节点ID
     * @return 最大编码
     */
    String selectMaxCodeByParentId(@Param("parentId") String parentId);

    /**
     * 检查是否存在子节点
     * @param catalogId 目录ID
     * @return 子节点数量
     */
    int countChildren(@Param("catalogId") String catalogId);

    /**
     * 根据名称和父节点ID查询（用于重复性检查）
     * @param name 目录名称
     * @param parentId 父节点ID
     * @param excludeId 排除的ID（用于更新时排除自己）
     * @return 目录数量
     */
    int countByNameAndParentId(@Param("name") String name, @Param("parentId") String parentId, @Param("excludeId") String excludeId);

    /**
     * 批量更新状态
     * @param catalogIds 目录ID列表
     * @param status 状态
     * @return 更新数量
     */
    int batchUpdateStatus(@Param("catalogIds") List<String> catalogIds, @Param("status") Boolean status);

}
