namespace TaxBaik.Domain.Interfaces;

using TaxBaik.Domain.Entities;

public interface IRevenueTrackingRepository
{
    Task<int> CreateAsync(RevenueTracking revenue, CancellationToken cancellationToken = default);
    Task<IEnumerable<RevenueTracking>> GetAllAsync(CancellationToken cancellationToken = default);
    Task<IEnumerable<RevenueTracking>> GetByClientIdAsync(int clientId, CancellationToken cancellationToken = default);
    Task<IEnumerable<RevenueTracking>> GetPendingPaymentsAsync(CancellationToken cancellationToken = default);
    Task<IEnumerable<RevenueTracking>> GetByDateRangeAsync(DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
    Task UpdateAsync(RevenueTracking revenue, CancellationToken cancellationToken = default);
    Task MarkPaidAsync(int id, DateTime paymentDate, CancellationToken cancellationToken = default);
    Task<decimal> GetTotalRevenueAsync(DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
}
