package com.jeesharp.business.modules.coupon.api;

import com.jeesharp.business.modules.coupon.dto.CouponCheckoutContextDTO;
import com.jeesharp.business.modules.coupon.dto.CouponFreezeCommandDTO;
import com.jeesharp.business.modules.coupon.vo.CouponCheckoutListVO;
import com.jeesharp.business.modules.coupon.vo.CouponOrderDiscountVO;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 优惠券结账跨模块 API：试算、冻结、核销与释放；垂直域 Application 通过本接口编排。
 *
 * @author jeesharp
 * @since 2026-06-08
 */
public interface CouponCheckoutApi {

    CouponCheckoutListVO listForCheckout(CouponCheckoutContextDTO context);

    Map<String, Object> listForCheckoutLegacyMap(String memberId, BigDecimal orderAmount);

    BigDecimal resolveDiscount(CouponCheckoutContextDTO context, String memberCouponId);

    void freezeForOrder(CouponFreezeCommandDTO command);

    void confirmOrderPaid(String orderId);

    void returnOnRefund(String orderId, String reason);

    BigDecimal getFrozenDiscountAmount(String orderId);

    void releaseFrozen(String orderId, String reason);

    /**
     * 订单展示：查询关联会员券的抵扣金额与名称（待支付冻结或已支付使用）。
     */
    CouponOrderDiscountVO resolveOrderCouponDisplay(String orderId);

    /**
     * 解析会员券所属模板租户编码（平台券通常为 {@code 1}；无模板时返回 null）。
     */
    String resolveTemplateTenantCode(String memberCouponId);

    /**
     * 商城合并支付批次：核销平台券（freezeOrderId=batchId）及各子单商户券。
     */
    void confirmAllFrozenForMallBatch(String batchId, java.util.List<String> subOrderIds);

    /**
     * 商城合并支付批次：释放平台券及各子单商户券冻结。
     */
    void releaseAllFrozenForMallBatch(String batchId, java.util.List<String> subOrderIds, String reason);
}
