package com.ruoyi.bst.order.service;

import com.ruoyi.bst.order.domain.Order;
import com.ruoyi.bst.order.domain.OrderVO;
import com.ruoyi.bst.order.domain.bo.OrderChangeBO;
import com.ruoyi.bst.order.domain.bo.OrderCreateBO;
import com.ruoyi.bst.order.domain.bo.OrderDeductBO;
import com.ruoyi.bst.order.domain.bo.OrderEndBO;
import com.ruoyi.bst.order.domain.bo.OrderPayBO;
import com.ruoyi.bst.order.domain.bo.OrderPayRideFeeBO;
import com.ruoyi.bst.order.domain.dto.OrderCalcPrePriceDTO;
import com.ruoyi.bst.order.domain.dto.OrderChangeDeviceDTO;
import com.ruoyi.bst.order.domain.dto.OrderCreateDTO;
import com.ruoyi.bst.order.domain.dto.OrderDeductDTO;
import com.ruoyi.bst.order.domain.dto.OrderEndDTO;
import com.ruoyi.bst.order.domain.dto.OrderPayDTO;
import com.ruoyi.bst.order.domain.dto.OrderPayRideFeeDTO;
import com.ruoyi.bst.order.domain.vo.OrderPrePriceVO;

public interface OrderConverter {

    /**
     * 订单创建前，计算并转换为价格VO
     */
    OrderPrePriceVO toOrderPrePriceVO(OrderCalcPrePriceDTO dto);

    /**
     * 订单创建，将DTO转换为BO
     */
    OrderCreateBO toCreateBO(OrderCreateDTO dto);

    /**
     * 订单支付，将订单转换为BO
     */
    OrderPayBO toPayBO(OrderVO order, OrderPayDTO dto);

    /**
     * 订单结束，将订单转换为PO
     */
    Order toPOByEnd(OrderVO order);

    /**
     * 订单结束，将DTO转换为BO
     */
    OrderEndBO toEndBO(OrderEndDTO dto);

    /**
     * 订单换车，将DTO转换为BO
     */
    OrderChangeBO toChangeBO(OrderChangeDeviceDTO dto);

    /**
     * 订单支付骑行费，将DTO转换为BO
     */
    OrderPayRideFeeBO toPayRideFeeBO(OrderPayRideFeeDTO dto);

    /**
     * 转为押金抵扣BO
     * @param dto
     * @return
     */
    OrderDeductBO toDeductBo(OrderDeductDTO dto);
    
}
