using CashLineERP.Contracts.Finance;

namespace CashLineERP.Application.Finance;

public interface IPaymentSettlementBatchService
{
    IReadOnlyCollection<PaymentSettlementBatchResponse> GetBatches(long? paymentChannelConfigurationId = null);
    PaymentSettlementBatchResponse? GetBatch(long paymentSettlementBatchId);
    PaymentSettlementBatchResponse CreateBatch(CreatePaymentSettlementBatchRequest request);
    PaymentSettlementBatchResponse SubmitBatch(long paymentSettlementBatchId, long actorUserId);
    PaymentSettlementBatchResponse ApproveBatch(long paymentSettlementBatchId, long actorUserId);
    PaymentSettlementBatchResponse PostBatch(long paymentSettlementBatchId, long actorUserId);
    IReadOnlyCollection<PaymentSettlementExceptionResponse> GetExceptions(long? paymentSettlementBatchId = null, string? statusCode = null);
    PaymentSettlementExceptionResponse? GetException(long paymentSettlementExceptionId);
    PaymentSettlementExceptionResponse ConfirmException(long paymentSettlementExceptionId, long actorUserId, ResolvePaymentSettlementExceptionRequest request);
    PaymentSettlementExceptionResponse OverrideException(long paymentSettlementExceptionId, long actorUserId, ResolvePaymentSettlementExceptionRequest request);
}
