Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components.Governance

    Friend NotInheritable Class MASMenuButtonReadinessManifest
        Friend Sub New(hasChromePolicy As Boolean,
                       hasShellRootOwnership As Boolean,
                       hasKeyboardMenuActivation As Boolean,
                       hasMenuMutationClosePolicy As Boolean,
                       hasOfficialDropDownPopupRoute As Boolean)
            Me.HasChromePolicy = hasChromePolicy
            Me.HasShellRootOwnership = hasShellRootOwnership
            Me.HasKeyboardMenuActivation = hasKeyboardMenuActivation
            Me.HasMenuMutationClosePolicy = hasMenuMutationClosePolicy
            Me.HasOfficialDropDownPopupRoute = hasOfficialDropDownPopupRoute
        End Sub

        Friend ReadOnly Property HasChromePolicy As Boolean
        Friend ReadOnly Property HasShellRootOwnership As Boolean
        Friend ReadOnly Property HasKeyboardMenuActivation As Boolean
        Friend ReadOnly Property HasMenuMutationClosePolicy As Boolean
        Friend ReadOnly Property HasOfficialDropDownPopupRoute As Boolean

        Friend ReadOnly Property Status As MASMenuButtonReadinessStatus
            Get
                If Not HasChromePolicy Then Return MASMenuButtonReadinessStatus.BlockedByMissingChromePolicy
                If Not HasShellRootOwnership Then Return MASMenuButtonReadinessStatus.BlockedByMissingShellRootOwnership
                If Not HasKeyboardMenuActivation Then Return MASMenuButtonReadinessStatus.BlockedByMissingKeyboardMenuActivation
                If Not HasMenuMutationClosePolicy Then Return MASMenuButtonReadinessStatus.BlockedByMissingMenuMutationClose
                If Not HasOfficialDropDownPopupRoute Then Return MASMenuButtonReadinessStatus.BlockedByParallelPopupPath
                Return MASMenuButtonReadinessStatus.Ready
            End Get
        End Property

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASMenuButtonReadinessStatus.Ready
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASMenuButtonReadinessManifest
            Return New MASMenuButtonReadinessManifest(
                hasChromePolicy:=True,
                hasShellRootOwnership:=True,
                hasKeyboardMenuActivation:=True,
                hasMenuMutationClosePolicy:=True,
                hasOfficialDropDownPopupRoute:=True)
        End Function
    End Class

End Namespace
