Option Strict On
Option Explicit On

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Friend-only readiness evidence for MASNotificationPanel. It proves the panel is a
    ''' same-surface notification summary and not a notification queue, push service,
    ''' persistence owner, virtualized list owner, or parallel toast route.
    ''' </summary>
    Friend NotInheritable Class MASNotificationPanelReadinessManifest
        Private Sub New(status As MASNotificationPanelReadinessStatus,
                        hasContentPolicy As Boolean,
                        hasReadStateBoundary As Boolean,
                        hasActionBoundary As Boolean,
                        hasRtlPolicy As Boolean,
                        notificationQueueOrServiceAbsent As Boolean,
                        virtualizationOwnerAbsent As Boolean)
            Me.Status = status
            Me.HasContentPolicy = hasContentPolicy
            Me.HasReadStateBoundary = hasReadStateBoundary
            Me.HasActionBoundary = hasActionBoundary
            Me.HasRtlPolicy = hasRtlPolicy
            Me.NotificationQueueOrServiceAbsent = notificationQueueOrServiceAbsent
            Me.VirtualizationOwnerAbsent = virtualizationOwnerAbsent
        End Sub

        Friend ReadOnly Property Status As MASNotificationPanelReadinessStatus
        Friend ReadOnly Property HasContentPolicy As Boolean
        Friend ReadOnly Property HasReadStateBoundary As Boolean
        Friend ReadOnly Property HasActionBoundary As Boolean
        Friend ReadOnly Property HasRtlPolicy As Boolean
        Friend ReadOnly Property NotificationQueueOrServiceAbsent As Boolean
        Friend ReadOnly Property VirtualizationOwnerAbsent As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASNotificationPanelReadinessStatus.Ready AndAlso
                       HasContentPolicy AndAlso
                       HasReadStateBoundary AndAlso
                       HasActionBoundary AndAlso
                       HasRtlPolicy AndAlso
                       NotificationQueueOrServiceAbsent AndAlso
                       VirtualizationOwnerAbsent
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASNotificationPanelReadinessManifest
            Return New MASNotificationPanelReadinessManifest(
                MASNotificationPanelReadinessStatus.Ready,
                hasContentPolicy:=True,
                hasReadStateBoundary:=True,
                hasActionBoundary:=MASNotificationPanelContentPolicy.HasActionBoundary,
                hasRtlPolicy:=True,
                notificationQueueOrServiceAbsent:=MASNotificationPanelContentPolicy.HasNoNotificationQueueOrService,
                virtualizationOwnerAbsent:=MASNotificationPanelContentPolicy.HasNoVirtualizationOwner)
        End Function
    End Class

End Namespace
