package com.ruoyi.bst.order.service;

import com.ruoyi.bst.device.domain.DeviceVO;
import com.ruoyi.bst.order.domain.OrderVO;
import com.ruoyi.bst.order.domain.bo.OrderCreateBO;

public interface OrderValidator {

    /**
     * 校验订单BO
     * @param bo 订单BO
     */
    void validate(OrderCreateBO bo);

    /**
     * 校验用户是否可以支付指定订单
     * @param order 订单
     * @param userId 用户ID
     * @return 是否可以支付
     */
    boolean canPay(OrderVO order, Long userId);

    /**
     * 校验普通用户是否可以结束指定订单
     * @param order 订单
     * @param userId 用户ID
     * @return 是否可以结束
     */
    boolean canEnd(OrderVO order, Long userId);


    /**
     * 校验用户是否可以操作设备开启
     * @param order 订单
     * @param userId 用户ID
     * @return 是否可以操作设备开启
     */
    boolean canOpenDevice(OrderVO order, Long userId);

    /**
     * 校验用户是否可以操作设备关闭
     * @param order 订单
     * @param userId 用户ID
     * @return 是否可以操作设备关闭
     */
    boolean canCloseDevice(OrderVO order, Long userId);

    /**
     * 校验用户是否可以操作指定订单
     * @param orderId 订单ID
     * @return 是否可以操作
     */
    boolean canOperate(Long orderId);

}
