package com.qaup.system.service;

import java.util.List;
import com.qaup.system.domain.SysVehicleType;

/**
 * 车辆类型（路径编码模式）Service接口
 * 
 * @author Claude Code
 * @date 2025-07-13
 */
public interface ISysVehicleTypeService 
{
    /**
     * 查询车辆类型
     * 
     * @param id 车辆类型主键
     * @return 车辆类型
     */
    public SysVehicleType selectSysVehicleTypeById(Long id);

    /**
     * 根据类型编码查询车辆类型
     * 
     * @param typeCode 类型编码
     * @return 车辆类型
     */
    public SysVehicleType selectSysVehicleTypeByCode(String typeCode);

    /**
     * 查询车辆类型列表
     * 
     * @param sysVehicleTypeNew 车辆类型
     * @return 车辆类型集合
     */
    public List<SysVehicleType> selectSysVehicleTypeList(SysVehicleType sysVehicleType);

    /**
     * 根据父编码查询子类型列表
     * 
     * @param parentCode 父类型编码
     * @return 车辆类型集合
     */
    public List<SysVehicleType> selectChildTypesByParentCode(String parentCode);

    /**
     * 根据层级查询车辆类型列表
     * 
     * @param pathLevel 路径层级
     * @return 车辆类型集合
     */
    public List<SysVehicleType> selectSysVehicleTypeByLevel(Integer pathLevel);

    /**
     * 查询所有一级分类
     * 
     * @return 一级分类集合
     */
    public List<SysVehicleType> selectTopLevelTypes();

    /**
     * 查询所有叶子节点
     * 
     * @return 叶子节点集合
     */
    public List<SysVehicleType> selectLeafTypes();

    /**
     * 根据一级分类编码查询所有子类型
     * 
     * @param topLevelCode 一级分类编码（UV、SP、NM）
     * @return 子类型集合
     */
    public List<SysVehicleType> selectTypesByTopLevel(String topLevelCode);

    /**
     * 查询所有无人车类型
     * 
     * @return 无人车类型集合
     */
    public List<SysVehicleType> selectUnmannedVehicleTypes();

    /**
     * 查询所有特勤车类型
     * 
     * @return 特勤车类型集合
     */
    public List<SysVehicleType> selectSpecialVehicleTypes();

    /**
     * 查询所有普通车类型
     * 
     * @return 普通车类型集合
     */
    public List<SysVehicleType> selectNormalVehicleTypes();

    /**
     * 新增车辆类型
     * 
     * @param sysVehicleTypeNew 车辆类型
     * @return 结果
     */
    public int insertSysVehicleType(SysVehicleType sysVehicleType);

    /**
     * 修改车辆类型
     * 
     * @param sysVehicleTypeNew 车辆类型
     * @return 结果
     */
    public int updateSysVehicleType(SysVehicleType sysVehicleType);

    /**
     * 批量删除车辆类型
     * 
     * @param ids 需要删除的车辆类型主键集合
     * @return 结果
     */
    public int deleteSysVehicleTypeByIds(Long[] ids);

    /**
     * 删除车辆类型信息
     * 
     * @param id 车辆类型主键
     * @return 结果
     */
    public int deleteSysVehicleTypeById(Long id);

    /**
     * 根据类型编码删除车辆类型
     * 
     * @param typeCode 类型编码
     * @return 结果
     */
    public int deleteSysVehicleTypeByCode(String typeCode);

    /**
     * 检查类型编码是否已存在
     * 
     * @param typeCode 类型编码
     * @return 是否存在
     */
    public boolean checkTypeCodeExists(String typeCode);

    /**
     * 检查是否存在子类型
     * 
     * @param parentCode 父类型编码
     * @return 子类型数量
     */
    public int countChildTypes(String parentCode);

    /**
     * 从VehicleTypeCode枚举初始化数据库数据
     * 
     * @return 初始化的记录数
     */
    public int initDataFromEnum();

    /**
     * 构建树形结构的车辆类型列表
     * 
     * @return 树形结构列表
     */
    public List<SysVehicleType> buildVehicleTypeTree();

    /**
     * 根据类型编码获取完整的层级路径
     * 
     * @param typeCode 类型编码
     * @return 层级路径列表（从根到当前节点）
     */
    public List<SysVehicleType> getTypeHierarchy(String typeCode);
}