using CashLineERP.Contracts.Finance;

namespace CashLineERP.Application.Finance;

public interface IReconciliationService
{
    IReadOnlyCollection<BankStatementResponse> GetBankStatements();

    BankStatementResponse? GetBankStatement(long bankStatementId);

    BankStatementResponse CreateBankStatement(CreateBankStatementRequest request);

    IReadOnlyCollection<ReconciliationRunResponse> GetRuns();

    ReconciliationRunResponse? GetRun(long receiptReconciliationRunId);

    ReconciliationRunResponse RunReceiptReconciliation(RunReceiptReconciliationRequest request);

    ReconciliationRunResponse RunSettlementReconciliation(RunReceiptReconciliationRequest request);

    IReadOnlyCollection<ReconciliationExceptionQueueItemResponse> GetExceptionQueue(string? matchStatusCode = null);

    IReadOnlyCollection<ReconciliationHistoryEntryResponse> GetHistory(long? receiptReconciliationRunId = null, long? bankStatementId = null, string? resolutionCode = null, string? matchedDocumentType = null);

    ReconciliationAuditResponse? GetAudit(long receiptReconciliationItemId);

    BulkResolveReconciliationItemsResponse BulkResolve(BulkResolveReconciliationItemsRequest request);

    ReconciliationItemResponse ManualMatch(long receiptReconciliationItemId, ManualMatchReconciliationItemRequest request);

    ReconciliationItemResponse OverrideItem(long receiptReconciliationItemId, OverrideReconciliationItemRequest request);
}
