Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components.Governance

    Friend NotInheritable Class MASSliderReadinessManifest
        Friend Sub New(hasArchitectureRegistration As Boolean,
                       hasApplicationGateway As Boolean,
                       hasPremiumInputSurface As Boolean,
                       hasRangeNormalizationPolicy As Boolean,
                       hasKeyboardStepPolicy As Boolean,
                       hasCultureAwareValueFormatting As Boolean,
                       hasNoParallelRangeOrBindingPath As Boolean,
                       hasNoRunnerOrNativeWrapperPath As Boolean)
            Me.HasArchitectureRegistration = hasArchitectureRegistration
            Me.HasApplicationGateway = hasApplicationGateway
            Me.HasPremiumInputSurface = hasPremiumInputSurface
            Me.HasRangeNormalizationPolicy = hasRangeNormalizationPolicy
            Me.HasKeyboardStepPolicy = hasKeyboardStepPolicy
            Me.HasCultureAwareValueFormatting = hasCultureAwareValueFormatting
            Me.HasNoParallelRangeOrBindingPath = hasNoParallelRangeOrBindingPath
            Me.HasNoRunnerOrNativeWrapperPath = hasNoRunnerOrNativeWrapperPath
        End Sub

        Friend ReadOnly Property HasArchitectureRegistration As Boolean
        Friend ReadOnly Property HasApplicationGateway As Boolean
        Friend ReadOnly Property HasPremiumInputSurface As Boolean
        Friend ReadOnly Property HasRangeNormalizationPolicy As Boolean
        Friend ReadOnly Property HasKeyboardStepPolicy As Boolean
        Friend ReadOnly Property HasCultureAwareValueFormatting As Boolean
        Friend ReadOnly Property HasNoParallelRangeOrBindingPath As Boolean
        Friend ReadOnly Property HasNoRunnerOrNativeWrapperPath As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASSliderReadinessStatus.Ready
            End Get
        End Property

        Friend ReadOnly Property Status As MASSliderReadinessStatus
            Get
                If Not HasArchitectureRegistration OrElse Not HasApplicationGateway Then Return MASSliderReadinessStatus.BlockedByMissingArchitectureRegistration
                If Not HasRangeNormalizationPolicy OrElse Not HasKeyboardStepPolicy OrElse Not HasCultureAwareValueFormatting Then Return MASSliderReadinessStatus.BlockedByMissingRangePolicy
                If Not HasPremiumInputSurface OrElse Not HasNoParallelRangeOrBindingPath Then Return MASSliderReadinessStatus.BlockedByParallelRangeOrBindingPath
                If Not HasNoRunnerOrNativeWrapperPath Then Return MASSliderReadinessStatus.BlockedByRunnerOrNativeWrapperPath
                Return MASSliderReadinessStatus.Ready
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASSliderReadinessManifest
            Return New MASSliderReadinessManifest(
                hasArchitectureRegistration:=True,
                hasApplicationGateway:=True,
                hasPremiumInputSurface:=True,
                hasRangeNormalizationPolicy:=True,
                hasKeyboardStepPolicy:=True,
                hasCultureAwareValueFormatting:=True,
                hasNoParallelRangeOrBindingPath:=True,
                hasNoRunnerOrNativeWrapperPath:=True)
        End Function
    End Class

End Namespace
