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

import com.jeesharp.business.modules.finance.api.dto.PaySettleBizOrderSnapshot;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 各业态向财务域提供子单结算摘要的 SPI；商城、酒店等模块各自实现。
 *
 * @author jeesharp
 * @since 2026-06-11
 */
public interface PaySettleBizOrderProvider {

    /**
     * 支持的业务场景编码，须与 {@code PayRecordBizSceneEnum} 一致。
     */
    String bizScene();

    /**
     * 按子单主键查询摘要；不存在返回 {@code null}。
     */
    PaySettleBizOrderSnapshot getOrder(String bizOrderId);

    /**
     * 合并支付按批次查子单；无批次时按 {@code bizOrderId} 查单笔。
     * <p>仅商城 {@code MALL_ORDER} 存在真实多子单批次；其他业态实现应返回 0～1 条。</p>
     */
    List<PaySettleBizOrderSnapshot> listSubOrdersForPay(String payBatchId, String bizOrderId);

    /**
     * 按子单编号解析首条子单主键。
     */
    String findFirstOrderIdByOrderNo(String orderNo);

    /**
     * 按批次编号解析批次主键（仅商城合并支付有业务编号）。
     */
    String findPayBatchIdByBatchNo(String batchNo);

    /**
     * 批量解析子单编号。
     */
    Map<String, String> mapOrderNoByIds(Collection<String> bizOrderIds);

    /**
     * 批量解析批次编号。
     */
    Map<String, String> mapBatchNoByIds(Collection<String> payBatchIds);
}
