namespace TaxBaik.Domain.Interfaces;

using TaxBaik.Domain.Entities;

public interface IContractRepository
{
    Task<int> CreateAsync(Contract contract, CancellationToken cancellationToken = default);
    Task<IEnumerable<Contract>> GetAllAsync(CancellationToken cancellationToken = default);
    Task<Contract?> GetByIdAsync(int id, CancellationToken cancellationToken = default);
    Task<IEnumerable<Contract>> GetByClientIdAsync(int clientId, CancellationToken cancellationToken = default);
    Task<IEnumerable<Contract>> GetActiveContractsAsync(CancellationToken cancellationToken = default);
    Task<IEnumerable<Contract>> GetExpiringContractsAsync(int daysAhead = 30, CancellationToken cancellationToken = default);
    Task UpdateAsync(Contract contract, CancellationToken cancellationToken = default);
    Task<decimal> GetMonthlyRecurringRevenueAsync(CancellationToken cancellationToken = default);
}
