Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components.Governance

    Friend NotInheritable Class GlyphButtonReadinessManifest
        Friend Sub New(hasInteractionPolicy As Boolean,
                       hasKeyboardActivation As Boolean,
                       hasFocusVisualState As Boolean,
                       hasOfficialIconRendererRoute As Boolean,
                       hasNoPublicSurfaceLeak As Boolean)
            Me.HasInteractionPolicy = hasInteractionPolicy
            Me.HasKeyboardActivation = hasKeyboardActivation
            Me.HasFocusVisualState = hasFocusVisualState
            Me.HasOfficialIconRendererRoute = hasOfficialIconRendererRoute
            Me.HasNoPublicSurfaceLeak = hasNoPublicSurfaceLeak
        End Sub

        Friend ReadOnly Property HasInteractionPolicy As Boolean
        Friend ReadOnly Property HasKeyboardActivation As Boolean
        Friend ReadOnly Property HasFocusVisualState As Boolean
        Friend ReadOnly Property HasOfficialIconRendererRoute As Boolean
        Friend ReadOnly Property HasNoPublicSurfaceLeak As Boolean

        Friend ReadOnly Property Status As GlyphButtonReadinessStatus
            Get
                If Not HasInteractionPolicy Then Return GlyphButtonReadinessStatus.BlockedByMissingInteractionPolicy
                If Not HasKeyboardActivation Then Return GlyphButtonReadinessStatus.BlockedByMissingKeyboardActivation
                If Not HasFocusVisualState Then Return GlyphButtonReadinessStatus.BlockedByMissingFocusVisualState
                If Not HasOfficialIconRendererRoute Then Return GlyphButtonReadinessStatus.BlockedByMissingRendererRoute
                If Not HasNoPublicSurfaceLeak Then Return GlyphButtonReadinessStatus.BlockedByPublicSurfaceLeak
                Return GlyphButtonReadinessStatus.Ready
            End Get
        End Property

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = GlyphButtonReadinessStatus.Ready
            End Get
        End Property

        Friend Shared Function CreateCurrent() As GlyphButtonReadinessManifest
            Return New GlyphButtonReadinessManifest(
                hasInteractionPolicy:=True,
                hasKeyboardActivation:=True,
                hasFocusVisualState:=True,
                hasOfficialIconRendererRoute:=True,
                hasNoPublicSurfaceLeak:=True)
        End Function
    End Class

End Namespace
