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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.asset.controller.admin.replacement.vo.VehicleReplacementPageReqVO;
import cn.iocoder.yudao.module.asset.controller.admin.replacement.vo.VehicleReplacementSaveReqVO;
import cn.iocoder.yudao.module.asset.dal.dataobject.replacement.VehicleReplacementDO;
import jakarta.validation.Valid;

/**
 * 替换车申请 Service 接口
 *
 * @author 芋道源码
 */
public interface VehicleReplacementService {

    /**
     * 创建替换车申请
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createReplacement(@Valid VehicleReplacementSaveReqVO createReqVO);

    /**
     * 更新替换车申请
     *
     * @param updateReqVO 更新信息
     */
    void updateReplacement(@Valid VehicleReplacementSaveReqVO updateReqVO);

    /**
     * 删除替换车申请
     *
     * @param id 编号
     */
    void deleteReplacement(Long id);

    /**
     * 获得替换车申请
     *
     * @param id 编号
     * @return 替换车申请
     */
    VehicleReplacementDO getReplacement(Long id);

    /**
     * 获得替换车申请分页
     *
     * @param pageReqVO 分页查询
     * @return 替换车申请分页
     */
    PageResult<VehicleReplacementDO> getReplacementPage(VehicleReplacementPageReqVO pageReqVO);

    /**
     * 提交审批
     *
     * @param id 编号
     * @return 流程实例ID
     */
    String submitApproval(Long id);

    /**
     * 撤回审批
     *
     * @param id 编号
     */
    void withdrawApproval(Long id);

    /**
     * 更新审批状态（BPM回调）
     *
     * @param id 编号
     * @param bpmStatus BPM状态
     */
    void updateApprovalStatus(Long id, Integer bpmStatus);

    /**
     * 确认换回（临时替换）
     *
     * @param id 编号
     */
    void confirmReturn(Long id);

}
