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

import com.jeesharp.business.modules.finance.paymentrecord.enums.PayRecordBizSceneEnum;

/**
 * 微信分账跨模块 API，供各业态在支付成功与子单完成时触发分账流程。
 *
 * @author jeesharp
 * @since 2026-06-11
 */
public interface ProfitSharingApi {

    /**
     * 支付成功后为需分账子单创建待分账记录（幂等，跨业态）。
     *
     * @param financePayOrderId 财务支付单主键
     * @param bizScene          业务场景，见 {@link PayRecordBizSceneEnum}
     * @param payBatchId        合并支付批次主键；仅 MALL_ORDER 合单必填，其他业态传 null 即可
     * @param bizOrderId        业务子单主键（非商城单订单支付时用于解析唯一子单）
     * @param transactionId     微信 transaction_id
     */
    void createPendingForPay(String financePayOrderId, String bizScene, String payBatchId, String bizOrderId,
            String transactionId);

    /**
     * 业务子单完成后调度分账（幂等，跨业态）。
     *
     * @param bizScene   业务场景
     * @param bizOrderId 业务子单主键
     */
    void scheduleSharingByBizOrder(String bizScene, String bizOrderId);

    /**
     * 支付成功后为商城子单创建待分账记录（幂等）。
     *
     * @param financePayOrderId 财务支付单主键
     * @param payBatchId        商城合并支付批次主键，单商户支付可为空
     * @param transactionId     微信 transaction_id
     */
    default void createPendingForMallPay(String financePayOrderId, String payBatchId, String transactionId) {
        createPendingForPay(financePayOrderId, PayRecordBizSceneEnum.MALL_ORDER.getCode(), payBatchId, null,
                transactionId);
    }

    /**
     * 商城子单完成后调度分账（幂等）。
     *
     * @param mallOrderId 商城子订单主键
     */
    default void scheduleSharingBySubOrder(String mallOrderId) {
        scheduleSharingByBizOrder(PayRecordBizSceneEnum.MALL_ORDER.getCode(), mallOrderId);
    }

    /**
     * 管理端或定时任务手动重试单条分账。
     *
     * @param profitSharingOrderId 分账单主键
     */
    void retry(String profitSharingOrderId);
}
