using CashLineERP.Contracts.IslamicFinance;

namespace CashLineERP.Application.IslamicFinance.ReceivablesFinance;

public interface IReceivablesFinanceService
{
    IReadOnlyCollection<IslamicFinanceReceivablesCaseResponse> GetCases(
        string? statusCode = null,
        long? customerPartyId = null,
        long? partnerLenderId = null);
    IslamicFinanceReceivablesCaseResponse? GetCase(long receivablesCaseId);
    IslamicFinanceReceivablesCaseResponse CreateCase(CreateIslamicFinanceReceivablesCaseRequest request);
    IslamicFinanceReceivablesCaseResponse SubmitCase(long receivablesCaseId, long actorUserId);
    IslamicFinanceReceivablesCaseResponse ApproveCase(long receivablesCaseId, long actorUserId);
    IslamicFinanceReceivablesCaseResponse ActivateCase(long receivablesCaseId, long actorUserId);
    IReadOnlyCollection<IslamicFinanceLifecycleHistoryEntryResponse> GetCaseHistory(long receivablesCaseId);
    IslamicFinanceReceivablesCaseAuditResponse? GetCaseAudit(long receivablesCaseId);
    IReadOnlyCollection<IslamicFinanceReceivablesEligibilityInvoiceResponse> GetEligibleInvoices(long customerPartyId, string? currencyCode, DateOnly? asOfDate = null);
}
