using ZB.MOM.WW.OtOpcUa.Configuration.Entities;

namespace ZB.MOM.WW.OtOpcUa.Configuration.Validation;

/// <summary>
///     Inputs for draft validation. Contains the draft's rows plus the minimum prior-generation
///     rows needed for cross-generation invariants (EquipmentUuid stability, UnsArea identity).
/// </summary>
public sealed class DraftSnapshot
{
    public required long GenerationId { get; init; }
    public required string ClusterId { get; init; }

    public IReadOnlyList<Namespace> Namespaces { get; init; } = [];
    public IReadOnlyList<DriverInstance> DriverInstances { get; init; } = [];
    public IReadOnlyList<Device> Devices { get; init; } = [];
    public IReadOnlyList<UnsArea> UnsAreas { get; init; } = [];
    public IReadOnlyList<UnsLine> UnsLines { get; init; } = [];
    public IReadOnlyList<Equipment> Equipment { get; init; } = [];
    public IReadOnlyList<Tag> Tags { get; init; } = [];
    public IReadOnlyList<PollGroup> PollGroups { get; init; } = [];

    /// <summary>Prior Equipment rows (any generation, same cluster) for stability checks.</summary>
    public IReadOnlyList<Equipment> PriorEquipment { get; init; } = [];

    /// <summary>Active reservations (<c>ReleasedAt IS NULL</c>) for pre-flight.</summary>
    public IReadOnlyList<ExternalIdReservation> ActiveReservations { get; init; } = [];
}
