package com.ruoyi.bst.orderDevice.service;

import java.util.List;

import com.ruoyi.bst.order.domain.vo.OrderInParkingVO;
import com.ruoyi.bst.orderDevice.domain.OrderDevice;
import com.ruoyi.bst.orderDevice.domain.OrderDeviceQuery;
import com.ruoyi.bst.orderDevice.domain.OrderDeviceVO;

/**
 * 订单设备Service接口
 *
 * @author ruoyi
 * @date 2025-04-01
 */
public interface OrderDeviceService
{
    /**
     * 查询订单设备
     *
     * @param id 订单设备主键
     * @return 订单设备
     */

    default OrderDeviceVO selectOrderDeviceById(Long id) {
        return selectOrderDeviceById(id, false);
    }

    /**
     * 查询订单设备
     *
     * @param id    订单设备主键
     * @param scope
     * @return 订单设备
     */

    public OrderDeviceVO selectOrderDeviceById(Long id, boolean scope);

    /**
     * 查询订单设备列表
     *
     * @param orderDevice 订单设备
     * @return 订单设备集合
     */
    public List<OrderDeviceVO> selectOrderDeviceList(OrderDeviceQuery orderDevice);

    /**
     * 新增订单设备
     *
     * @param orderDevice 订单设备
     * @return 结果
     */
    public int insertOrderDevice(OrderDevice orderDevice);

    /**
     * 修改订单设备
     *
     * @param orderDevice 订单设备
     * @return 结果
     */
    public int updateOrderDevice(OrderDevice orderDevice);

    /**
     * 批量删除订单设备
     *
     * @param ids 需要删除的订单设备主键集合
     * @return 结果
     */
    public int deleteOrderDeviceByIds(Long[] ids);

    /**
     * 删除订单设备信息
     *
     * @param id 订单设备主键
     * @return 结果
     */
    public int deleteOrderDeviceById(Long id);

    /**
     * 根据订单ID查询原始设备
     *
     * @param id 订单ID
     * @return 订单设备
     */
    public OrderDeviceVO selectOriginByOrderId(Long orderId);

    /**
     * 开始使用订单设备
     *
     * @param orderDevice 订单设备
     * @return 结果
     */
    public int start(OrderDeviceVO orderDevice);

    /**
     * 根据订单ID查询订单设备列表
     *
     * @param id 订单ID
     * @return 订单设备列表
     */
    public List<OrderDeviceVO> selectOrderDeviceListByOrderId(Long orderId);

    /**
     * 结束订单设备
     *
     * @param orderDevice 订单设备
     * @return 结果
     */
    public int finish(OrderDeviceVO orderDevice, String picture, OrderInParkingVO inParkingVO);

    /**
     * 开始订单设备
     *
     * @param id 订单设备ID
     * @return 结果
     */
    public int start(Long id);

    /**
     * 获取用户正在使用的订单设备
     *
     * @param userId 用户ID
     * @return 订单设备
     */
    public OrderDeviceVO selectUsingByUserId(Long userId);
}
