using CashLineERP.Application.IslamicFinance;

namespace CashLineERP.Application.IslamicFinance.Disbursements;

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

    IslamicFinanceMurabahaDisbursementDetailView? GetDisbursement(long disbursementId);
    IslamicFinanceMurabahaDisbursementDetailView Create(CreateIslamicFinanceMurabahaDisbursementCommand command);
    IslamicFinanceMurabahaDisbursementDetailView Submit(long disbursementId, long actorUserId);
    IslamicFinanceMurabahaDisbursementDetailView Approve(long disbursementId, long actorUserId);
    IslamicFinanceMurabahaDisbursementDetailView Return(long disbursementId, long actorUserId);
    IslamicFinanceMurabahaDisbursementDetailView Reject(long disbursementId, long actorUserId);
    IslamicFinanceMurabahaDisbursementDetailView Execute(long disbursementId, ExecuteIslamicFinanceMurabahaDisbursementCommand command, long actorUserId);
    IslamicFinanceMurabahaDisbursementDetailView Suspend(long disbursementId, string reasonCode, long actorUserId);
    IslamicFinanceMurabahaDisbursementDetailView Close(long disbursementId, long actorUserId);
    IReadOnlyCollection<IslamicFinanceLifecycleHistoryEntryView> GetDisbursementHistory(long disbursementId);
    IslamicFinanceMurabahaDisbursementAuditView? GetDisbursementAudit(long disbursementId);
}
