using CashLineERP.Contracts.IslamicFinance;
using CashLineERP.Application.IslamicFinance;

namespace CashLineERP.Application.IslamicFinance.Murabaha;

public interface IMurabahaCaseService
{
    IReadOnlyCollection<IslamicFinanceMurabahaCaseResponse> GetCases(
        string? statusCode = null,
        long? financingRequestId = null,
        long? partnerLenderId = null);
    IslamicFinanceMurabahaCaseResponse? GetCase(long murabahaCaseId);
    IslamicFinanceMurabahaCaseResponse CreateCase(CreateIslamicFinanceMurabahaCaseRequest request);
    IslamicFinanceMurabahaCaseResponse SubmitCase(long murabahaCaseId, long actorUserId);
    IslamicFinanceMurabahaCaseResponse ApproveCase(long murabahaCaseId, long actorUserId);
    IslamicFinanceMurabahaCaseResponse ActivateCase(long murabahaCaseId, long actorUserId);
    IslamicFinanceMurabahaScheduleResponse GenerateSchedule(long murabahaCaseId, long actorUserId, GenerateIslamicFinanceMurabahaScheduleRequest request);
    IslamicFinanceMurabahaScheduleResponse? GetSchedule(long murabahaCaseId);
    IslamicFinanceMurabahaScheduleLineResponse? GetScheduleInstallment(long murabahaCaseId, int installmentNumber);
    IReadOnlyCollection<IslamicFinanceLifecycleHistoryEntryResponse> GetCaseHistory(long murabahaCaseId);
    IslamicFinanceMurabahaCaseAuditResponse? GetCaseAudit(long murabahaCaseId);
}
