package cn.iocoder.yudao.module.asset.service.vehiclemodel;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.asset.controller.admin.vehiclemodel.vo.VehicleModelPageReqVO;
import cn.iocoder.yudao.module.asset.controller.admin.vehiclemodel.vo.VehicleModelSaveReqVO;
import cn.iocoder.yudao.module.asset.dal.dataobject.vehiclemodel.VehicleModelDO;
import cn.iocoder.yudao.module.asset.dal.dataobject.vehiclemodel.VehicleModelMaintainItemDO;

import jakarta.validation.Valid;
import java.util.List;

/**
 * 车型参数 Service 接口
 *
 * @author 芋道源码
 */
public interface VehicleModelService {

    /**
     * 创建车型参数
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createVehicleModel(@Valid VehicleModelSaveReqVO createReqVO);

    /**
     * 更新车型参数
     *
     * @param updateReqVO 更新信息
     */
    void updateVehicleModel(@Valid VehicleModelSaveReqVO updateReqVO);

    /**
     * 删除车型参数
     *
     * @param id 编号
     */
    void deleteVehicleModel(Long id);

    /**
     * 获得车型参数
     *
     * @param id 编号
     * @return 车型参数
     */
    VehicleModelDO getVehicleModel(Long id);

    /**
     * 获得车型参数分页
     *
     * @param pageReqVO 分页查询
     * @return 车型参数分页
     */
    PageResult<VehicleModelDO> getVehicleModelPage(VehicleModelPageReqVO pageReqVO);

    /**
     * 获得车型参数精简列表
     *
     * @return 车型参数列表
     */
    List<VehicleModelDO> getVehicleModelSimpleList();

    /**
     * 根据品牌获取车型参数列表
     *
     * @param brand 品牌
     * @return 车型参数列表
     */
    List<VehicleModelDO> getVehicleModelListByBrand(String brand);

    /**
     * 根据车型获取车型参数列表
     *
     * @param model 车型
     * @return 车型参数列表
     */
    List<VehicleModelDO> getVehicleModelListByModel(String model);

    /**
     * 获取车型的维保项目列表
     *
     * @param vehicleModelId 车型ID
     * @return 维保项目列表
     */
    List<VehicleModelMaintainItemDO> getVehicleModelMaintainItems(Long vehicleModelId);

    /**
     * 获取已使用的保养项目列表（去重）
     *
     * @return 保养项目名称列表
     */
    List<String> getUsedMaintainItems();

}
