package com.gxwebsoft.shop.service;

import com.gxwebsoft.shop.entity.ShopOrder;

import java.util.List;

/**
 * 订单取消服务接口
 *
 * @author WebSoft
 * @since 2025-01-26
 */
public interface OrderCancelService {

    /**
     * 取消单个订单
     *
     * @param order 订单对象
     * @return 是否取消成功
     */
    boolean cancelOrder(ShopOrder order);

    /**
     * 批量取消订单
     *
     * @param orders 订单列表
     * @return 成功取消的订单数量
     */
    int batchCancelOrders(List<ShopOrder> orders);

    /**
     * 查找超时的待付款订单
     *
     * @param timeoutMinutes 超时时间（分钟）
     * @param batchSize 批量大小
     * @return 超时订单列表
     */
    List<ShopOrder> findExpiredUnpaidOrders(Integer timeoutMinutes, Integer batchSize);

    /**
     * 查找指定租户的超时订单
     *
     * @param tenantId 租户ID
     * @param timeoutMinutes 超时时间（分钟）
     * @param batchSize 批量大小
     * @return 超时订单列表
     */
    List<ShopOrder> findExpiredUnpaidOrdersByTenant(Integer tenantId, Integer timeoutMinutes, Integer batchSize);

    /**
     * 回退订单库存
     *
     * @param order 订单对象
     * @return 是否回退成功
     */
    boolean restoreOrderStock(ShopOrder order);

    /**
     * 退还订单优惠券
     *
     * @param order 订单对象
     * @return 是否退还成功
     */
    boolean returnOrderCoupon(ShopOrder order);
}
