Option Strict On
Option Explicit On

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Friend-only readiness evidence for MASSidePanel. It proves drawer-panel visual
    ''' ownership, header/content slot policy, close affordance geometry, and separation from
    ''' native panels and FloatRuntime lifecycle ownership.
    ''' </summary>
    Friend NotInheritable Class MASSidePanelReadinessManifest
        Private Sub New(status As MASSidePanelReadinessStatus,
                        hasSurfacePolicy As Boolean,
                        hasHeaderFooterSlotPolicy As Boolean,
                        hasContentSlotPolicy As Boolean,
                        hasCloseAffordancePolicy As Boolean,
                        nativePanelWrapperAbsent As Boolean,
                        floatLifecycleOwnerAbsent As Boolean)
            Me.Status = status
            Me.HasSurfacePolicy = hasSurfacePolicy
            Me.HasHeaderFooterSlotPolicy = hasHeaderFooterSlotPolicy
            Me.HasContentSlotPolicy = hasContentSlotPolicy
            Me.HasCloseAffordancePolicy = hasCloseAffordancePolicy
            Me.NativePanelWrapperAbsent = nativePanelWrapperAbsent
            Me.FloatLifecycleOwnerAbsent = floatLifecycleOwnerAbsent
        End Sub

        Friend ReadOnly Property Status As MASSidePanelReadinessStatus
        Friend ReadOnly Property HasSurfacePolicy As Boolean
        Friend ReadOnly Property HasHeaderFooterSlotPolicy As Boolean
        Friend ReadOnly Property HasContentSlotPolicy As Boolean
        Friend ReadOnly Property HasCloseAffordancePolicy As Boolean
        Friend ReadOnly Property NativePanelWrapperAbsent As Boolean
        Friend ReadOnly Property FloatLifecycleOwnerAbsent As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASSidePanelReadinessStatus.Ready AndAlso
                       HasSurfacePolicy AndAlso
                       HasHeaderFooterSlotPolicy AndAlso
                       HasContentSlotPolicy AndAlso
                       HasCloseAffordancePolicy AndAlso
                       NativePanelWrapperAbsent AndAlso
                       FloatLifecycleOwnerAbsent
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASSidePanelReadinessManifest
            Return New MASSidePanelReadinessManifest(
                MASSidePanelReadinessStatus.Ready,
                hasSurfacePolicy:=True,
                hasHeaderFooterSlotPolicy:=MASSidePanelSurfacePolicy.HasHeaderFooterSlotPolicy,
                hasContentSlotPolicy:=MASSidePanelSurfacePolicy.HasContentSlotPolicy,
                hasCloseAffordancePolicy:=MASSidePanelSurfacePolicy.HasCloseAffordancePolicy,
                nativePanelWrapperAbsent:=MASSidePanelSurfacePolicy.HasNoNativePanelWrapper,
                floatLifecycleOwnerAbsent:=MASSidePanelSurfacePolicy.HasNoFloatLifecycleOwner)
        End Function
    End Class

End Namespace
