package com.qaup.system.mapper;

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

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

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

    /**
     * 查询车辆类型列表
     * 
     * @param sysVehicleType 车辆类型
     * @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);

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

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

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

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

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

    /**
     * 检查类型编码是否已存在
     * 
     * @param typeCode 类型编码
     * @return 存在的记录数
     */
    public int checkTypeCodeExists(String typeCode);

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

    // ========== 向后兼容的方法 ==========

    /** 
     * @deprecated 使用selectSysVehicleTypeById()代替
     */
    @Deprecated
    default SysVehicleType selectSysVehicleTypeByTypeId(Long typeId) {
        return selectSysVehicleTypeById(typeId);
    }

    /** 
     * @deprecated 使用deleteSysVehicleTypeById()代替
     */
    @Deprecated
    default int deleteSysVehicleTypeByTypeId(Long typeId) {
        return deleteSysVehicleTypeById(typeId);
    }

    /** 
     * @deprecated 使用deleteSysVehicleTypeByIds()代替
     */
    @Deprecated
    default int deleteSysVehicleTypeByTypeIds(Long[] typeIds) {
        return deleteSysVehicleTypeByIds(typeIds);
    }
}