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

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.asset.controller.admin.returnorder.vo.ReturnOrderPageReqVO;
import cn.iocoder.yudao.module.asset.controller.admin.returnorder.vo.ReturnOrderRespVO;
import cn.iocoder.yudao.module.asset.controller.admin.returnorder.vo.ReturnOrderSaveReqVO;
import cn.iocoder.yudao.module.asset.dal.dataobject.returnorder.ReturnOrderDO;

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

public interface ReturnOrderService {

    Long createReturnOrder(@Valid ReturnOrderSaveReqVO createReqVO);

    void updateReturnOrder(@Valid ReturnOrderSaveReqVO updateReqVO);

    void deleteReturnOrder(Long id);

    ReturnOrderDO getReturnOrder(Long id);

    ReturnOrderRespVO getReturnOrderDetail(Long id);

    PageResult<ReturnOrderDO> getReturnOrderPage(ReturnOrderPageReqVO pageReqVO);

    void completeInspection(Long id);

    void settleReturnOrder(Long id);

    /**
     * 从交车单创建还车单
     */
    Long createFromDelivery(Long deliveryOrderId, List<Long> vehicleIds);

    /**
     * 从替换车创建还车单（永久替换审批通过时）
     */
    Long createFromReplacement(Long replacementId, Long contractId, Long vehicleId);

    /**
     * 开始单车验车（创建或克隆验车记录）
     */
    Long startVehicleInspection(Long returnOrderVehicleId);

    /**
     * 完成单车验车
     */
    void completeVehicleInspection(Long returnOrderVehicleId);

    /**
     * 提交审批
     */
    void submitApproval(Long id);

    /**
     * 撤回审批
     */
    void withdrawApproval(Long id);

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

}
