using Domain.Dtos;
using Domain.Entities;
using Domain.Generics;

namespace Models.Interfaces
{
    public interface IQuoteRepository
    {
        #region Presupuestos
        Task<PagedResult<QuoteDto>> SearchAsync(int? customerId, string? customerText, string? quoteNumber, int? professionalId, string? professionalText, int? institutionId, string? institutionText, int? patientId, string? patientText, DateTime? issueDateFrom, DateTime? issueDateTo, string? status, int page = 1, int pageSize = 50);
        #endregion
        #region Guardado completo de presupuesto (encabezado + detalles + roles + ajustes + impuestos)
        Task<(int Id, string Quotenumber)> CreateFullQuoteAsync(EQuoteHeader quote, int formSeriesId);
        Task<QuoteDto?> GetDtoByIdAsync(int id);
        Task<QuoteDto?> GetDtoByQuoteNumberAsync(string quoteNumber);
        Task<bool> AuthorizeQuoteAsync(int quoteId, List<EQuoteDetail> approvedItems);
        #endregion
    }
}
