using CashLineERP.Contracts.Integration;

namespace CashLineERP.Application.Integration;

public interface IInboxMessageService
{
    IReadOnlyCollection<InboxMessageResponse> GetInboxMessages(string? statusCode = null, string? integrationProviderCode = null);

    InboxMessageResponse? GetInboxMessage(long inboxMessageId);

    InboxMessageResponse? FindExistingMessage(long integrationEndpointId, string? externalMessageId, string? correlationKey);

    InboxMessageResponse ReceiveInboxMessage(long actorUserId, ReceiveInboxMessageRequest request);

    ProcessInboxBatchResultResponse ProcessPendingMessages(ProcessInboxBatchRequest request);

    InboxMessageResponse MoveInboxMessageToDeadLetter(long inboxMessageId, long actorUserId, DeadLetterQueueItemRequest request);

    InboxMessageResponse ReplayInboxMessage(long inboxMessageId, long actorUserId, ReplayDeadLetterQueueItemRequest request);
}
