Option Strict On
Option Explicit On

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Friend-only readiness evidence for MASGroupBox. It proves premium surface,
    ''' material/frame, title-plate, and child-slot decisions are controlled by Nexamas UI
    ''' policies while native GroupBox/Panel wrappers and parallel surface routes remain absent.
    ''' </summary>
    Friend NotInheritable Class MASGroupBoxReadinessManifest
        Private Sub New(status As MASGroupBoxReadinessStatus,
                        hasSurfacePolicy As Boolean,
                        hasSurfaceMaterialRoute As Boolean,
                        hasChildSlotPolicy As Boolean,
                        hasTitlePlatePolicy As Boolean,
                        nativeGroupBoxWrapperAbsent As Boolean,
                        parallelSurfaceRouteAbsent As Boolean)
            Me.Status = status
            Me.HasSurfacePolicy = hasSurfacePolicy
            Me.HasSurfaceMaterialRoute = hasSurfaceMaterialRoute
            Me.HasChildSlotPolicy = hasChildSlotPolicy
            Me.HasTitlePlatePolicy = hasTitlePlatePolicy
            Me.NativeGroupBoxWrapperAbsent = nativeGroupBoxWrapperAbsent
            Me.ParallelSurfaceRouteAbsent = parallelSurfaceRouteAbsent
        End Sub

        Friend ReadOnly Property Status As MASGroupBoxReadinessStatus
        Friend ReadOnly Property HasSurfacePolicy As Boolean
        Friend ReadOnly Property HasSurfaceMaterialRoute As Boolean
        Friend ReadOnly Property HasChildSlotPolicy As Boolean
        Friend ReadOnly Property HasTitlePlatePolicy As Boolean
        Friend ReadOnly Property NativeGroupBoxWrapperAbsent As Boolean
        Friend ReadOnly Property ParallelSurfaceRouteAbsent As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASGroupBoxReadinessStatus.Ready AndAlso
                       HasSurfacePolicy AndAlso
                       HasSurfaceMaterialRoute AndAlso
                       HasChildSlotPolicy AndAlso
                       HasTitlePlatePolicy AndAlso
                       NativeGroupBoxWrapperAbsent AndAlso
                       ParallelSurfaceRouteAbsent
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASGroupBoxReadinessManifest
            Return New MASGroupBoxReadinessManifest(
                MASGroupBoxReadinessStatus.Ready,
                hasSurfacePolicy:=True,
                hasSurfaceMaterialRoute:=MASGroupBoxSurfacePolicy.HasSurfaceMaterialRoute,
                hasChildSlotPolicy:=MASGroupBoxSurfacePolicy.HasChildSlotPolicy,
                hasTitlePlatePolicy:=MASGroupBoxSurfacePolicy.HasTitlePlatePolicy,
                nativeGroupBoxWrapperAbsent:=MASGroupBoxSurfacePolicy.HasNoNativeGroupBoxWrapper,
                parallelSurfaceRouteAbsent:=MASGroupBoxSurfacePolicy.HasNoParallelSurfaceRoute)
        End Function
    End Class

End Namespace
