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

namespace Core.Interfaces
{
    public interface IQuoteDom
    {
        #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);
        Task<QuoteDto?> GetDtoByQuoteNumberAsync(string quoteNumber);
        #endregion
        #region Exportación
        Task<byte[]> ExportFilteredToExcelAsync(QuoteSearchParams searchParams);
        #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);
        #endregion
        #region Autorización
        Task<bool> AuthorizeQuoteAsync(int quoteId, List<QuoteAuthorizationDto> items);
        #endregion

    }
}