package cn.iocoder.yudao.module.custom.service;


import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.custom.entity.CarMain;
import cn.iocoder.yudao.module.custom.vo.CarMainReqVO;
import cn.iocoder.yudao.module.custom.vo.CarMainRespVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 车辆信息 Service 接口
 *
 * @author 后台管理员
 */
public interface CarMainService extends IService<CarMain> {

    /**
     * 创建车辆信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    CommonResult<String> createCarMain(CarMainReqVO createReqVO);

    /**
     * 更新车辆信息
     *
     * @param updateReqVO 更新信息
     */
    CommonResult<String> updateCarMain(CarMainReqVO updateReqVO);

    /**
     * 删除车辆信息
     *
     * @param id 编号
     */
    void deleteCarMain(String id);

    /**
     * 获得车辆及关联客户信息
     *
     * @param id 编号
     * @return 车辆信息
     */
    CarMain getCarMain(String id);


    /**
     * 通过id查询车辆信息
     * @author PQZ
     * @date 18:08 2024/10/18
     * @param id 车辆id
     * @return cn.iocoder.yudao.module.custom.vo.CarMainRespVO
    **/
    CarMainRespVO queryCarById(String id);

    /**
     * 获得车辆信息分页
     *
     * @param pageReqVO 分页查询
     * @return 车辆信息分页
     */
    IPage<CarMainRespVO> getCarMainPage(CarMainReqVO pageReqVO);

    /**
     * 根据userId查询在某租户下的所有车辆列表
     * @author vinjor-M
     * @date 11:56 2024/10/14
     * @param userId 用户ID
     * @return java.util.List<cn.iocoder.yudao.module.custom.entity.CarMain>
    **/
    List<CarMain> selectListByUserId(Long userId);
    /**
     * 保险/年检/保养提醒列表
     * @author PQZ
     * @date 9:08 2024/8/14
     * @param pageReqVO 查询条件
     * @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.custom.vo.CarMainRespVO>
    **/
    IPage<CarMainRespVO> remindCarMainPage(CarMainReqVO pageReqVO);


    /**
     * 绑定车辆信息
     *
     * @param saveReqVO CustomerMainSaveReqVO实体
     * @return void
     **/
    void bindCustomAndCar(CarMainReqVO saveReqVO);

    /**
     * 测算车辆下一次保养/检测/保险时间
     * @author PQZ
     * @date 7:45 2024/8/9
     * @param reqVO TODO
     * @return java.time.LocalDateTime
    **/
    CarMainRespVO compute(CarMainReqVO reqVO);


}