namespace Domain.Entities
{
    /// <summary>
    /// Tabla de cabeceras de presupuestos
    /// </summary>
    /// 
    public class EQuoteHeader
    {
        /// <summary>
        /// ID interno
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Relación con Tickets
        /// </summary>
        public Guid TicketId { get; set; }

        /// <summary>
        /// Número visible del presupuesto
        /// </summary>
        public string Quotenumber { get; set; } = String.Empty;

        /// <summary>
        /// Cliente asociado
        /// </summary>
        public int CustomerId { get; set; }

        /// <summary>
        /// Unidad de negocio
        /// </summary>
        public int BusinessunitId { get; set; }

        /// <summary>
        /// Identificador único del vendedor
        /// </summary>
        public int PeopleId { get; set; }

        /// <summary>
        /// Fecha de emisión
        /// </summary>
        public DateTime Issuedate { get; set; }

        /// <summary>
        /// Fecha de aprobación
        /// </summary>
        public DateTime? Approvaldate { get; set; }

        /// <summary>
        /// Fecha tentativa (de cirugía por ej.)
        /// </summary>
        public DateTime? Estimateddate { get; set; }

        /// <summary>
        /// Días de validez de la oferta. Indica cuántos días estará vigente el presupuesto desde su fecha de emisión.
        /// </summary>
        public int? Offervaliditydays { get; set; }

        /// <summary>
        /// Condición de pago seleccionada para el presupuesto.
        /// </summary>
        public int? PaymenttermId { get; set; }

        /// <summary>
        /// Código de moneda pactada (ISO 4217). Ej: ARS, USD
        /// </summary>
        public string Currency { get; set; } = String.Empty;

        /// <summary>
        /// Tipo de cambio pactado para conversión a pesos argentinos
        /// </summary>
        public decimal? Exchangerate { get; set; }

        /// <summary>
        /// Importe neto antes de aplicar impuestos, expresado en la moneda pactada del presupuesto
        /// </summary>
        public decimal? Netamount { get; set; }

        /// <summary>
        /// Importe total del presupuesto expresado en la moneda pactada (extranjera), incluyendo impuestos y ajustes comerciales
        /// </summary>
        public decimal? TotalForeign { get; set; }

        /// <summary>
        /// Importe total del presupuesto en moneda local, calculado incluyendo impuestos y convertido según tipo de cambio pactado
        /// </summary>
        public decimal? Total { get; set; }

        /// <summary>
        /// Importe aprobado
        /// </summary>
        public decimal? Approvedamount { get; set; }

        /// <summary>
        /// Estado: E (Emitido), A (Aprobado), AC (Aprobado para cirugia), etc.
        /// </summary>
        public string Status { get; set; } = String.Empty;

        /// <summary>
        /// Indica si la cirugía se realizará fuera de la ciudad/localidad habitual (“out of town”)
        /// </summary>
        public bool OutOfTown { get; set; }

        /// <summary>
        /// Instrucción dirigida al área de logística para detallar qué debe prepararse o despacharse (ej: “CMF 1.5 + INSTRUMENTAL”)
        /// </summary>
        public string? DispatchInstruction { get; set; } = String.Empty;

        /// <summary>
        /// Cantidad de impresiones
        /// </summary>
        public int Printcount { get; set; }

        /// <summary>
        /// Observaciones internas
        /// </summary>
        public string? Observations { get; set; } = String.Empty;

        /// <summary>
        /// Fecha de creación
        /// </summary>
        public DateTime Createdat { get; set; }

        /// <summary>
        /// Fecha de modificación
        /// </summary>
        public DateTime? Modifiedat { get; set; }

        public virtual ICollection<EQuoteAdjustment> PhSQuoteAdjustments { get; set; } = new List<EQuoteAdjustment>();

        public virtual ICollection<EQuoteDetail> PhSQuoteDetails { get; set; } = new List<EQuoteDetail>();

        public virtual ICollection<EQuoteRole> PhSQuoteRoles { get; set; } = new List<EQuoteRole>();

        public virtual ICollection<EQuoteTax> PhSQuoteTaxes { get; set; } = new List<EQuoteTax>();
    }
}
