namespace Domain.Entities
{
    public partial class ELSProduct
    {
        /// <summary>
        /// Identificador único del producto médico o industrial
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Código de producto definido por la fábrica o fabricante. Puede variar según proveedor, presentación o país de origen.
        /// </summary>
        public string FactoryCode { get; set; } = string.Empty;

        /// <summary>
        /// Nombre técnico o estandarizado del producto (ej: ficha técnica, fabricante)
        /// </summary>
        public string? Name { get; set; } = string.Empty;

        /// <summary>
        /// Descripción comercial o práctica del producto (impresión logística, uso cotidiano)
        /// </summary>
        public string Descripcion { get; set; } = string.Empty;

        /// <summary>
        /// Tipo de producto: 1=Implantable, 2=Instrumental, 3=Inyectable, etc.
        /// </summary>
        public int ProductType { get; set; }

        /// <summary>
        /// Tipo de trazabilidad: 1=No aplica, 2=Por cantidad, 3=Por lote y vencimiento
        /// </summary>
        public int TraceabilityType { get; set; }

        /// <summary>
        /// Indica si el producto requiere un proceso adicional previo a su uso (ej: esterilización, calibración, limpieza, inspección, etc.)
        /// </summary>
        public bool PlusProcess { get; set; }

        /// <summary>
        /// Código externo estándar del producto (ej: GTIN, código de proveedor, catálogo EAN, etc.)
        /// </summary>
        public string? ExternalCode { get; set; } = string.Empty;

        /// <summary>
        /// Código regulatorio (PM) o registro sanitario oficial del producto. Registro otorgado por ANMAT u ente regulador.
        /// </summary>
        public string? RegulatoryCode { get; set; } = string.Empty;

        /// <summary>
        /// División o familia técnica del producto (ej: columna, trauma, descartables, etc.)
        /// </summary>
        public int? DivisionId { get; set; }

        /// <summary>
        /// Unidad de medida base del producto (ej: unidad, mililitro, metro)
        /// </summary>
        public int UnitId { get; set; }

        public virtual ELSProductDivision? Division { get; set; }

        public virtual ELSUnitOfMeasure Unit { get; set; } = null!;
    }
}