Option Strict On
Option Explicit On

Namespace Nexamas.UI.FloatRuntime

    ' ============================================================
    ' MASFloatRuntime Contract
    ' Class: MASFloatQueueItem
    '
    ' Purpose:
    '   Represents one queued Float show request inside a Slot queue.
    '
    ' Responsibility:
    '   Stores the resolved request and ordering metadata required to show
    '   a queued Float after the current Float closes.
    '
    ' Owns:
    '   Queue item identity.
    '   Resolved request snapshot.
    '   Queue order metadata.
    '
    ' Does Not Own:
    '   Queue collection itself.
    '   Lifecycle execution.
    '   Policy authorization.
    '   Host state.
    '   Result delivery.
    '
    ' Allowed Dependencies:
    '   MASFloatResolvedRequest.
    '   DateTime.
    '
    ' Forbidden Dependencies:
    '   Legacy Overlay classes.
    '   MASFloatCoordinator concrete execution.
    '   MASFloatHost.
    '   Feature-owned lifecycle services.
    '
    ' Lifecycle Role:
    '   Created when PolicyEngine selects Queue.
    '   Consumed later by Coordinator when the slot becomes available.
    '
    ' Threading:
    '   Used by runtime-owned state on the UI/runtime path.
    '
    ' Mutation Rules:
    '   Immutable after construction.
    '
    ' Invariants:
    '   Queue item must contain a resolved request.
    '   Sequence must be positive.
    '
    ' Failure Rules:
    '   Missing resolved request or invalid sequence is rejected.
    ' ============================================================
    Friend NotInheritable Class MASFloatQueueItem

        Friend ReadOnly Property Sequence As Long

        Friend ReadOnly Property CreatedUtc As DateTime

        Friend ReadOnly Property ResolvedRequest As MASFloatResolvedRequest

        Friend Sub New(sequence As Long, resolvedRequest As MASFloatResolvedRequest)
            If sequence <= 0L Then
                Throw New ArgumentOutOfRangeException(NameOf(sequence))
            End If

            If resolvedRequest Is Nothing Then
                Throw New ArgumentNullException(NameOf(resolvedRequest))
            End If

            Me.Sequence = sequence
            Me.CreatedUtc = Nexamas.UI.Timing.MASTimeProvider.UtcNow()
            Me.ResolvedRequest = resolvedRequest
        End Sub

    End Class

End Namespace