Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components.Governance

    Friend NotInheritable Class MASSplitButtonReadinessManifest
        Friend Sub New(hasArchitectureRegistration As Boolean,
                       hasSegmentPolicy As Boolean,
                       hasKeyboardSegmentSemantics As Boolean,
                       hasMenuMutationClosePolicy As Boolean,
                       hasOfficialFloatMenuRoute As Boolean,
                       hasNoParallelMenuOrWrapperPath As Boolean)
            Me.HasArchitectureRegistration = hasArchitectureRegistration
            Me.HasSegmentPolicy = hasSegmentPolicy
            Me.HasKeyboardSegmentSemantics = hasKeyboardSegmentSemantics
            Me.HasMenuMutationClosePolicy = hasMenuMutationClosePolicy
            Me.HasOfficialFloatMenuRoute = hasOfficialFloatMenuRoute
            Me.HasNoParallelMenuOrWrapperPath = hasNoParallelMenuOrWrapperPath
        End Sub

        Friend ReadOnly Property HasArchitectureRegistration As Boolean
        Friend ReadOnly Property HasSegmentPolicy As Boolean
        Friend ReadOnly Property HasKeyboardSegmentSemantics As Boolean
        Friend ReadOnly Property HasMenuMutationClosePolicy As Boolean
        Friend ReadOnly Property HasOfficialFloatMenuRoute As Boolean
        Friend ReadOnly Property HasNoParallelMenuOrWrapperPath As Boolean

        Friend ReadOnly Property Status As MASSplitButtonReadinessStatus
            Get
                If Not HasArchitectureRegistration Then Return MASSplitButtonReadinessStatus.BlockedByMissingArchitectureRegistration
                If Not HasSegmentPolicy Then Return MASSplitButtonReadinessStatus.BlockedByMissingSegmentPolicy
                If Not HasKeyboardSegmentSemantics Then Return MASSplitButtonReadinessStatus.BlockedByMissingKeyboardSemantics
                If Not HasMenuMutationClosePolicy Then Return MASSplitButtonReadinessStatus.BlockedByMissingMenuLifecycle
                If Not HasOfficialFloatMenuRoute OrElse Not HasNoParallelMenuOrWrapperPath Then Return MASSplitButtonReadinessStatus.BlockedByParallelMenuPath
                Return MASSplitButtonReadinessStatus.Ready
            End Get
        End Property

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASSplitButtonReadinessStatus.Ready
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASSplitButtonReadinessManifest
            Return New MASSplitButtonReadinessManifest(
                hasArchitectureRegistration:=True,
                hasSegmentPolicy:=True,
                hasKeyboardSegmentSemantics:=True,
                hasMenuMutationClosePolicy:=True,
                hasOfficialFloatMenuRoute:=True,
                hasNoParallelMenuOrWrapperPath:=True)
        End Function
    End Class

End Namespace
