namespace Domain.Dtos.Stock
{
    /// <summary>
    /// Representa un ítem de stock disponible encontrado mediante búsqueda o escaneo.
    /// Este DTO se utiliza como resultado en la UI para que el usuario elija qué ítem tomar.
    /// </summary>
    public class StockItemScanResultDto
    {
        /// <summary>
        /// Identificador único del ítem en la tabla PhLSM_StockItem.
        /// </summary>
        public int StockItemId { get; set; }

        /// <summary>
        /// Identificador del producto asociado.
        /// </summary>
        public int ProductId { get; set; }

        /// <summary>
        /// Código de fábrica del producto.
        /// </summary>
        public string FactoryCode { get; set; } = string.Empty;

        /// <summary>
        /// Código externo o alternativo (si existe).
        /// </summary>
        public string? ExternalCode { get; set; }

        /// <summary>
        /// Nombre formal o técnico del producto.
        /// </summary>
        public string ProductName { get; set; } = string.Empty;

        /// <summary>
        /// Descripción comercial o de uso.
        /// </summary>
        public string? Description { get; set; }

        /// <summary>
        /// Identificador de la ubicación física (depósito, sala, etc.).
        /// </summary>
        public int? LocationId { get; set; }

        /// <summary>
        /// Nombre descriptivo de la ubicación.
        /// </summary>
        public string? LocationName { get; set; }

        /// <summary>
        /// Número de lote (si aplica).
        /// </summary>
        public string? Batch { get; set; }

        /// <summary>
        /// Número de serie de la unidad individual, según etiqueta de trazabilidad del fabricante.
        /// </summary>
        public string? Serial { get; set; }

        /// <summary>
        /// Fecha de vencimiento (si aplica).
        /// </summary>
        public DateOnly? Expiration { get; set; }

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

        /// <summary>
        /// Cantidad disponible actualmente.
        /// </summary>
        public decimal AvailableQty { get; set; }

        /// <summary>
        /// Indica si requiere proceso adicional (por ejemplo, esterilización).
        /// </summary>
        public bool PlusProcess { get; set; }
    }
}
