using System;
using System.Collections.Generic;

namespace Models.Models;

/// <summary>
/// Reservas de stock por origen genérico (source_type/source_id). Cada fila bloquea cantidad sobre un StockItem. No duplica lote/serie/vencimiento; se resuelve por JOIN a PhLSM_StockItem.
/// </summary>
public partial class PhLsmStockReservation
{
    /// <summary>
    /// Identificador autoincremental de la reserva.
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    /// Tipo de origen de la reserva. 1=Expedition (extensible a futuros orígenes).
    /// </summary>
    public byte SourceType { get; set; }

    /// <summary>
    /// Identificador del origen. Ej.: expedition_id cuando source_type=1.
    /// </summary>
    public int SourceId { get; set; }

    /// <summary>
    /// Referencia al StockItem exacto bloqueado (FK a PhLSM_StockItem). Define producto/ubicación/trazabilidad por JOIN.
    /// </summary>
    public int StockitemId { get; set; }

    /// <summary>
    /// Cantidad reservada (bloqueada). No disponible mientras status=1 (Reserved).
    /// </summary>
    public decimal ReservedQuantity { get; set; }

    /// <summary>
    /// Estado de la reserva: 1=Reserved, 2=Released, 3=Consumed.
    /// </summary>
    public int Status { get; set; }

    /// <summary>
    /// Fecha/hora de creación (UTC).
    /// </summary>
    public DateTime Createdat { get; set; }

    /// <summary>
    /// Última modificación (UTC). Puede ser NULL si nunca se actualizó.
    /// </summary>
    public DateTime? Modifiedat { get; set; }

    /// <summary>
    /// Token de concurrencia optimista (ROWVERSION) para actualizaciones seguras.
    /// </summary>
    public byte[] Rowversion { get; set; } = null!;

    public virtual PhLsmStockItem Stockitem { get; set; } = null!;
}
