namespace Domain.Dtos.Stock
{
    /// <summary>
    /// Representa un ítem seleccionado desde el stock real para operaciones como
    /// expediciones, consumo quirúrgico, ventas directas o devoluciones.
    /// Este DTO se usa únicamente en la capa de UI y se transforma a entidades de persistencia al guardar.
    /// </summary>
    public class StockItemSelectionDto
    {
        /// <summary>
        /// Identificador del ítem de stock seleccionado (PhLSM_StockItem.id)
        /// </summary>
        public int StockItemId { get; set; }

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

        /// <summary>
        /// Nombre o descripción corta del producto (solo para visualización en UI)
        /// </summary>
        public string? ProductName { get; set; } = string.Empty;

        /// <summary>
        /// Lote del stock seleccionado
        /// </summary>
        public string Batch { get; set; } = string.Empty;

        /// <summary>
        /// Número de serie de la unidad individual, según etiqueta de trazabilidad del fabricante.
        /// </summary>
        public string Serial { get; set; } = string.Empty ;
        
        /// <summary>
        /// Fecha de vencimiento (si aplica)
        /// </summary>
        public DateTime? Expiration { get; set; }

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

        /// <summary>
        /// Cantidad que el usuario desea usar (puede ser decimal si es por peso o volumen)
        /// </summary>
        public decimal Quantity { get; set; }

        /// <summary>
        /// Identificador del depósito o ubicación de donde se toma el ítem
        /// </summary>
        public int LocationId { get; set; }
    }
}
