Option Strict On
Option Explicit On

Namespace Nexamas.UI.Controls.Governance

    Friend NotInheritable Class MASValidationMessageReadinessManifest
        Friend Sub New(hasPresentationPolicy As Boolean,
                       hasOfficialSemanticToneRoute As Boolean,
                       hasOfficialMasIconRoute As Boolean,
                       hasOfficialFormValidationBoundary As Boolean,
                       hasNoDuplicateValidationVocabulary As Boolean,
                       hasNoNativeErrorProviderRoute As Boolean,
                       hasNoPublicApiLeak As Boolean)
            Me.HasPresentationPolicy = hasPresentationPolicy
            Me.HasOfficialSemanticToneRoute = hasOfficialSemanticToneRoute
            Me.HasOfficialMasIconRoute = hasOfficialMasIconRoute
            Me.HasOfficialFormValidationBoundary = hasOfficialFormValidationBoundary
            Me.HasNoDuplicateValidationVocabulary = hasNoDuplicateValidationVocabulary
            Me.HasNoNativeErrorProviderRoute = hasNoNativeErrorProviderRoute
            Me.HasNoPublicApiLeak = hasNoPublicApiLeak
        End Sub

        Friend ReadOnly Property HasPresentationPolicy As Boolean
        Friend ReadOnly Property HasOfficialSemanticToneRoute As Boolean
        Friend ReadOnly Property HasOfficialMasIconRoute As Boolean
        Friend ReadOnly Property HasOfficialFormValidationBoundary As Boolean
        Friend ReadOnly Property HasNoDuplicateValidationVocabulary As Boolean
        Friend ReadOnly Property HasNoNativeErrorProviderRoute As Boolean
        Friend ReadOnly Property HasNoPublicApiLeak As Boolean

        Friend ReadOnly Property Status As MASValidationMessageReadinessStatus
            Get
                If Not HasPresentationPolicy Then Return MASValidationMessageReadinessStatus.BlockedByMissingPresentationPolicy
                If Not HasOfficialSemanticToneRoute Then Return MASValidationMessageReadinessStatus.BlockedByMissingSemanticToneRoute
                If Not HasOfficialMasIconRoute Then Return MASValidationMessageReadinessStatus.BlockedByMissingMasIconRoute
                If Not HasOfficialFormValidationBoundary Then Return MASValidationMessageReadinessStatus.BlockedByMissingFormValidationBoundary
                If Not HasNoDuplicateValidationVocabulary Then Return MASValidationMessageReadinessStatus.BlockedByDuplicateValidationVocabulary
                If Not HasNoNativeErrorProviderRoute Then Return MASValidationMessageReadinessStatus.BlockedByNativeErrorProviderRoute
                If Not HasNoPublicApiLeak Then Return MASValidationMessageReadinessStatus.BlockedByPublicApiLeak
                Return MASValidationMessageReadinessStatus.Ready
            End Get
        End Property

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

        Friend Shared Function CreateCurrent() As MASValidationMessageReadinessManifest
            Return New MASValidationMessageReadinessManifest(
                hasPresentationPolicy:=True,
                hasOfficialSemanticToneRoute:=True,
                hasOfficialMasIconRoute:=True,
                hasOfficialFormValidationBoundary:=True,
                hasNoDuplicateValidationVocabulary:=True,
                hasNoNativeErrorProviderRoute:=True,
                hasNoPublicApiLeak:=True)
        End Function
    End Class

End Namespace
