package com.eitc.patient.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.eitc.patient.domain.DiagnosisType;
import com.eitc.patient.tree.DiagnosisTypeTree;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * DiagnosisTypeService
 *
 * @author mtx
 * @date: 2024/05/17 15:36
 */
@Service
public interface IDiagnosisTypeService extends IService<DiagnosisType> {


    /**
     * 获取面包屑
     *
     * @param parentId id
     * @return 字符串
     * @author mtx
     * @date: 2024/5/31 10:12
     */
    String findCrumb(String parentId);

    /**
     * 根据搜索条件查询所有的诊断分类
     *
     * @param diagnosisType 搜索条件
     * @return 列表
     */
    List<DiagnosisType> getDiagnosisTypes(DiagnosisType diagnosisType);

    /**
     * 封装属性结构
     *
     * @param parentId 父级id
     * @param list     数据
     * @return 封装好的数据
     */
    List<DiagnosisTypeTree> getChildren(String parentId, List<DiagnosisTypeTree> list);

    /**
     * 获取树形结构
     *
     * @param searchParam 搜索信息
     * @param visitType   状态
     * @return 返回结果
     * @author mtx
     * @date: 2024/8/21 9:36
     */
    List<DiagnosisTypeTree> findTreeList(String searchParam, String visitType);

    /**
     * 检查是否可以添加诊断类型
     * 此方法主要进行两个重要检查：
     * 1. 确保传入的诊断类型ID不为空，因为这是添加新诊断类型的必要条件
     * 2. 检查传入的诊断类型ID是否已经有子类型存在，如果存在子类型，则不允许添加新的诊断类型
     *
     * @param diagnosisTypeId 诊断类型ID，用于检查和添加新的诊断类型
     * @throws IllegalArgumentException 如果诊断类型ID为空或存在子类型，则抛出此异常
     */
    void checkAddDiagnosisType(String diagnosisTypeId);
}
