namespace CashLineERP.Application.Finance;

public interface IReconciliationRepository
{
    IReadOnlyCollection<BankStatementDetailView> GetBankStatements();

    BankStatementDetailView? GetBankStatement(long bankStatementId);

    BankStatementDetailView CreateBankStatement(CreateBankStatementCommand command);

    IReadOnlyCollection<ReceiptReconciliationRunDetailView> GetRuns();

    ReceiptReconciliationRunDetailView? GetRun(long receiptReconciliationRunId);

    ReceiptReconciliationRunDetailView RunReceiptReconciliation(RunReceiptReconciliationCommand command);

    ReceiptReconciliationRunDetailView RunSettlementReconciliation(RunReceiptReconciliationCommand command);

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

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

    ReconciliationAuditView? GetAudit(long receiptReconciliationItemId);

    ReceiptReconciliationItemView ManualMatch(long receiptReconciliationItemId, ManualMatchReconciliationItemCommand command);

    ReceiptReconciliationItemView OverrideItem(long receiptReconciliationItemId, OverrideReconciliationItemCommand command);
}
