Option Strict On
Option Explicit On

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Friend-only readiness evidence for MASDrawer. It proves drawer requests remain an
    ''' application/FloatRuntime gateway over MASSidePanel without owning a native form,
    ''' popup/flyout service, overlay service, or parallel drawer route.
    ''' </summary>
    Friend NotInheritable Class MASDrawerReadinessManifest
        Private Sub New(status As MASDrawerReadinessStatus,
                        hasFloatPolicy As Boolean,
                        hasFloatRuntimeRoute As Boolean,
                        hasSideWidthPolicy As Boolean,
                        hasDismissPolicy As Boolean,
                        parallelOverlayRouteAbsent As Boolean,
                        nativeFormWrapperAbsent As Boolean)
            Me.Status = status
            Me.HasFloatPolicy = hasFloatPolicy
            Me.HasFloatRuntimeRoute = hasFloatRuntimeRoute
            Me.HasSideWidthPolicy = hasSideWidthPolicy
            Me.HasDismissPolicy = hasDismissPolicy
            Me.ParallelOverlayRouteAbsent = parallelOverlayRouteAbsent
            Me.NativeFormWrapperAbsent = nativeFormWrapperAbsent
        End Sub

        Friend ReadOnly Property Status As MASDrawerReadinessStatus
        Friend ReadOnly Property HasFloatPolicy As Boolean
        Friend ReadOnly Property HasFloatRuntimeRoute As Boolean
        Friend ReadOnly Property HasSideWidthPolicy As Boolean
        Friend ReadOnly Property HasDismissPolicy As Boolean
        Friend ReadOnly Property ParallelOverlayRouteAbsent As Boolean
        Friend ReadOnly Property NativeFormWrapperAbsent As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASDrawerReadinessStatus.Ready AndAlso
                       HasFloatPolicy AndAlso
                       HasFloatRuntimeRoute AndAlso
                       HasSideWidthPolicy AndAlso
                       HasDismissPolicy AndAlso
                       ParallelOverlayRouteAbsent AndAlso
                       NativeFormWrapperAbsent
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASDrawerReadinessManifest
            Return New MASDrawerReadinessManifest(
                MASDrawerReadinessStatus.Ready,
                hasFloatPolicy:=True,
                hasFloatRuntimeRoute:=MASDrawerFloatPolicy.HasFloatRuntimeRoute,
                hasSideWidthPolicy:=MASDrawerFloatPolicy.HasSideWidthPolicy,
                hasDismissPolicy:=MASDrawerFloatPolicy.HasDismissPolicy,
                parallelOverlayRouteAbsent:=MASDrawerFloatPolicy.HasNoParallelOverlayRoute,
                nativeFormWrapperAbsent:=MASDrawerFloatPolicy.HasNoNativeFormWrapper)
        End Function
    End Class

End Namespace
