namespace Domain.Dtos
{
    public class QuoteDto
    {
        /// <summary>
        /// Identificador único del presupuesto.
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Número de presupuesto (ej. "Q-00000001").
        /// </summary>
        public string Quotenumber { get; set; } = string.Empty;
        
        /// <summary>
        /// Relación con Tickets
        /// </summary>
        public Guid? TicketId { get; set; }

        /// <summary>
        /// Fecha de emisión del presupuesto.
        /// </summary>
        public DateTime IssueDate { get; set; }

        /// <summary>
        /// Fecha estimada de realización o entrega.
        /// </summary>
        public DateTime? EstimatedDate { get; set; }

        /// <summary>
        /// Nombre completo del cliente asociado.
        /// </summary>
        public string CustomerName { get; set; } = string.Empty;

        /// <summary>
        /// Nombre completo del médico responsable.
        /// </summary>
        public string ProfessionalName { get; set; } = string.Empty;

        /// <summary>
        /// Nombre de la institución u hospital.
        /// </summary>
        public string InstitutionName { get; set; } = string.Empty;

        /// <summary>
        /// Nombre completo del paciente.
        /// </summary>
        public string PatientName { get; set; } = string.Empty;

        /// <summary>
        /// Días de validez del presupuesto (desde la fecha de emisión).
        /// </summary>
        public int? OfferValidityDays { get; set; }

        /// <summary>
        /// Descripción de la condición de pago (ej. "Contado", "30 días").
        /// </summary>
        public string? PaymentTermDescription { get; set; } = string.Empty;


        /// <summary>
        /// Nombre de la unidad de negocio.
        /// </summary>
        public string BusinessUnitName { get; set; } = string.Empty;

        /// <summary>
        /// Moneda del presupuesto (ej. "ARS", "USD").
        /// </summary>
        public string Currency { get; set; } = string.Empty;

        /// <summary>
        /// Importe total final (incluye impuestos y ajustes).
        /// </summary>
        public decimal Total { get; set; }

        /// <summary>
        /// Estado actual del presupuesto ("Pendiente", "Aprobado", etc.).
        /// </summary>
        public string Status { get; set; } = string.Empty;

        /// <summary>
        /// Nombre del vendedor o ejecutivo de ventas.
        /// </summary>
        public string SalespersonName { get; set; } = string.Empty;
        /// <summary>
        /// Nombre del vendedor o ejecutivo de ventas.
        /// </summary>
        public string Observations { get; set; } = string.Empty;

        /// <summary>
        /// Detalle de los ítems o productos cotizados.
        /// </summary>
        public List<QuoteItemDto> Items { get; set; } = new();

        /// <summary>
        /// Desglose de los impuestos aplicados.
        /// </summary>
        public List<QuoteTaxDto> Taxes { get; set; } = new();

        /// <summary>
        /// Ajustes comerciales aplicados (descuentos o recargos).
        /// </summary>
        public List<QuoteAdjustmentDto> Adjustments { get; set; } = new();

        /// <summary>
        /// Datos comerciales del cliente.
        /// </summary>
        public QuoteCustomerDto Customer { get; set; } = new();
        
        /// <summary>
        /// Logo de la compañia.
        /// </summary>
        public string LogoBase64 { get; set; } = string.Empty;
    }
}