namespace TaxBaik.Domain.Interfaces;

using TaxBaik.Domain.Entities;

public interface IInquiryRepository
{
    Task<int> CreateAsync(Inquiry inquiry, CancellationToken cancellationToken = default);
    Task<Inquiry?> GetByIdAsync(int id, CancellationToken cancellationToken = default);
    Task<(IEnumerable<Inquiry> Items, int Total)> GetPagedAsync(
        int page, int pageSize, string? status = null, CancellationToken cancellationToken = default);
    Task<int> CountAsync(CancellationToken cancellationToken = default);
    Task<int> CountThisMonthAsync(CancellationToken cancellationToken = default);
    Task<int> CountByStatusAsync(string status, CancellationToken cancellationToken = default);
    Task<int> CountByDateRangeAsync(DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
    Task<int> CountByStatusAndDateAsync(string status, DateTime startDate, DateTime endDate, CancellationToken cancellationToken = default);
    Task UpdateStatusAsync(int id, string status, CancellationToken cancellationToken = default);
    Task UpdateAdminMemoAsync(int id, string? adminMemo, CancellationToken cancellationToken = default);
    Task UpdateAsync(Inquiry inquiry, CancellationToken cancellationToken = default);
    Task LinkClientAsync(int inquiryId, int clientId, CancellationToken cancellationToken = default);
    Task DeleteAsync(int id, CancellationToken cancellationToken = default);
}
