package shop.alien.dining.service;

/**
 * 订单锁定服务接口
 * 用于管理订单和结算的锁定状态，防止并发操作
 *
 * @author system
 * @since 2025-01-XX
 */
public interface OrderLockService {

    /**
     * 锁定订单(防止多人同时下单)
     *
     * @param tableId 桌号ID
     * @param userId 用户ID
     * @return 是否锁定成功
     */
    boolean lockOrder(Integer tableId, Integer userId);

    /**
     * 解锁订单
     *
     * @param tableId 桌号ID
     * @param userId 用户ID
     */
    void unlockOrder(Integer tableId, Integer userId);

    /**
     * 检查订单是否被锁定
     *
     * @param tableId 桌号ID
     * @return 锁定用户ID，如果未锁定返回null
     */
    Integer checkOrderLock(Integer tableId);

    /**
     * 锁定订单结算(防止多人同时结算)
     *
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 是否锁定成功
     */
    boolean lockSettlement(Integer orderId, Integer userId);

    /**
     * 解锁订单结算
     *
     * @param orderId 订单ID
     * @param userId 用户ID
     */
    void unlockSettlement(Integer orderId, Integer userId);

    /**
     * 检查订单结算是否被锁定
     *
     * @param orderId 订单ID
     * @return 锁定用户ID，如果未锁定返回null
     */
    Integer checkSettlementLock(Integer orderId);
}
