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

namespace CashLineERP.Application.IslamicFinance.Disbursements;

public interface IIslamicFinanceMurabahaDisbursementService
{
    IReadOnlyCollection<IslamicFinanceMurabahaDisbursementResponse> GetDisbursements(
        long? murabahaCaseId = null,
        string? statusCode = null,
        string? targetType = null);

    IslamicFinanceMurabahaDisbursementResponse? GetDisbursement(long disbursementId);
    IslamicFinanceMurabahaDisbursementResponse CreateDisbursement(CreateIslamicFinanceMurabahaDisbursementRequest request);
    IslamicFinanceMurabahaDisbursementResponse SubmitDisbursement(long disbursementId, long actorUserId);
    IslamicFinanceMurabahaDisbursementResponse ApproveDisbursement(long disbursementId, long actorUserId);
    IslamicFinanceMurabahaDisbursementResponse ReturnDisbursement(long disbursementId, long actorUserId);
    IslamicFinanceMurabahaDisbursementResponse RejectDisbursement(long disbursementId, long actorUserId);
    IslamicFinanceMurabahaDisbursementResponse ExecuteDisbursement(long disbursementId, ExecuteIslamicFinanceMurabahaDisbursementRequest request, long actorUserId);
    IslamicFinanceMurabahaDisbursementResponse SuspendDisbursement(long disbursementId, SuspendIslamicFinanceMurabahaDisbursementRequest request, long actorUserId);
    IslamicFinanceMurabahaDisbursementResponse CloseDisbursement(long disbursementId, long actorUserId);
    IReadOnlyCollection<IslamicFinanceLifecycleHistoryEntryResponse> GetDisbursementHistory(long disbursementId);
    IslamicFinanceMurabahaDisbursementAuditResponse? GetDisbursementAudit(long disbursementId);
}
