namespace CashLineERP.Application.Finance;

public interface IPaymentGatewayExecutionRepository
{
    IReadOnlyCollection<PaymentGatewayExecutionView> GetExecutions(long? paymentChannelConfigurationId = null, string? statusCode = null);
    PaymentGatewayExecutionView? GetExecution(long paymentGatewayExecutionId);
    IReadOnlyCollection<PaymentGatewayExecutionView> GetExecutionsForSourceDocument(string sourceDocumentType, long sourceDocumentId);
    PaymentGatewayExecutionView QueueCustomerCollection(long customerPaymentRequestId, long actorUserId);
    PaymentGatewayExecutionView QueueSupplierPayout(long accountsPayablePaymentId, string integrationProviderCode, long actorUserId);
    PaymentGatewayExecutionView QueueCustomerRefund(long customerRefundId, long actorUserId);
    PaymentGatewayProviderContractView GetCustomerCollectionProviderContract(long customerPaymentRequestId);
    PaymentGatewayProviderContractView GetSupplierPayoutProviderContract(long accountsPayablePaymentId, string? integrationProviderCode = null);
    PaymentGatewayProviderContractView GetCustomerRefundProviderContract(long customerRefundId);
    PaymentGatewayProviderContractView GetExecutionProviderStatusContract(long paymentGatewayExecutionId);
    PaymentGatewayProviderContractView GetExecutionProviderCancelContract(long paymentGatewayExecutionId);
    DispatchPaymentGatewayExecutionBatchResultView DispatchPendingExecutions(DispatchPaymentGatewayExecutionBatchCommand command);
}
