package com.hotent.baseInfo.manager;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hotent.baseInfo.dto.*;
import com.hotent.baseInfo.model.CostCatalog;
import com.hotent.baseInfo.req.CostCatalogPageReq;
import com.hotent.baseInfo.vo.CatalogNameVo;
import com.hotent.baseInfo.vo.CatalogOperationVo;
import com.hotent.base.manager.BaseManager;
import com.hotent.baseInfo.vo.CatalogTreeVo;

import java.util.List;

/**
 * 成本监审目录表 服务类
 *
 * @author 超级管理员
 * @since 2025-09-04
 */
public interface CostCatalogManager extends BaseManager<CostCatalog> {
	/**
	 * 根据主键获取详情
	 * @param id
	 * @return
	 */
	CostCatalog getDetail(String id);
	


	/**
	 * 查询目录列表（树形结构）
	 * @param req 查询条件
	 * @return 目录列表
	 */
	List<CostCatalog> getCatalogList(CostCatalogPageReq req) throws Exception;

	/**
	 * 新增目录类别
	 * @param createDto 新增参数
	 * @return 操作结果
	 */
	void createCategory(CategoryCreateDto createDto);

	/**
	 * 新增目录内容
	 * @param createDto 新增参数
	 * @return 操作结果
	 */
	void createContent(ContentCreateDto createDto);


	/**
	 * 切换目录状态
	 * @param statusDto 状态参数
	 * @return 是否成功
	 */
	boolean updateStatus(CatalogStatusDto statusDto);

	boolean updateCategory(CategoryCreateDto createDto);


	boolean updateContent(ContentCreateDto createDto);


	/**
	 * 检查目录名称是否重复
	 * @param name 目录名称
	 * @param parentId 父节点ID
	 * @param excludeId 排除的ID（用于更新时排除自己）
	 * @return 是否重复
	 */
	boolean isNameDuplicate(String name, String parentId, String excludeId);



	/**
	 * 生成新的编码
	 * @param parentId 父节点ID
	 * @return 新编码
	 */
	String generateNewCode(String parentId);

	//获取目录类别
	List<CostCatalog> getCategoryList();




}
