namespace TaxBaik.Domain.Interfaces;

using TaxBaik.Domain.Entities;

public interface ITaxFilingScheduleRepository
{
    Task<int> CreateAsync(TaxFilingSchedule schedule, CancellationToken cancellationToken = default);
    Task<IEnumerable<TaxFilingSchedule>> GetAllAsync(CancellationToken cancellationToken = default);
    Task<TaxFilingSchedule?> GetByIdAsync(int id, CancellationToken cancellationToken = default);
    Task<IEnumerable<TaxFilingSchedule>> GetByClientIdAsync(int clientId, CancellationToken cancellationToken = default);
    Task<IEnumerable<TaxFilingSchedule>> GetUpcomingDuesAsync(int daysAhead = 30, CancellationToken cancellationToken = default);
    Task<IEnumerable<TaxFilingSchedule>> GetByStatusAsync(string status, CancellationToken cancellationToken = default);
    Task UpdateAsync(TaxFilingSchedule schedule, CancellationToken cancellationToken = default);
    Task MarkCompletedAsync(int id, CancellationToken cancellationToken = default);
}
