Option Strict On
Option Explicit On

Imports Nexamas.UI.PropertyGrid

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Evidence manifest proving MASPropertyGrid is a real MAS control over the PropertyGrid foundation.
    ''' </summary>
    Friend NotInheritable Class MASPropertyGridReadinessManifest

        Friend Sub New(status As MASPropertyGridReadinessStatus,
                       hasPublicControl As Boolean,
                       hasObjectInspectionFoundation As Boolean,
                       hasEditCommitFoundation As Boolean,
                       hasFriendRenderer As Boolean,
                       hasArchitectureRegistration As Boolean,
                       hasNoDemoDependency As Boolean,
                       hasNoParallelPropertySystem As Boolean)
            Me.Status = status
            Me.HasPublicControl = hasPublicControl
            Me.HasObjectInspectionFoundation = hasObjectInspectionFoundation
            Me.HasEditCommitFoundation = hasEditCommitFoundation
            Me.HasFriendRenderer = hasFriendRenderer
            Me.HasArchitectureRegistration = hasArchitectureRegistration
            Me.HasNoDemoDependency = hasNoDemoDependency
            Me.HasNoParallelPropertySystem = hasNoParallelPropertySystem
        End Sub

        Friend ReadOnly Property Status As MASPropertyGridReadinessStatus
        Friend ReadOnly Property HasPublicControl As Boolean
        Friend ReadOnly Property HasObjectInspectionFoundation As Boolean
        Friend ReadOnly Property HasEditCommitFoundation As Boolean
        Friend ReadOnly Property HasFriendRenderer As Boolean
        Friend ReadOnly Property HasArchitectureRegistration As Boolean
        Friend ReadOnly Property HasNoDemoDependency As Boolean
        Friend ReadOnly Property HasNoParallelPropertySystem As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASPropertyGridReadinessStatus.Ready AndAlso
                       HasPublicControl AndAlso
                       HasObjectInspectionFoundation AndAlso
                       HasEditCommitFoundation AndAlso
                       HasFriendRenderer AndAlso
                       HasArchitectureRegistration AndAlso
                       HasNoDemoDependency AndAlso
                       HasNoParallelPropertySystem
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASPropertyGridReadinessManifest
            Dim sample As MASPropertyGridSnapshot = MASPropertyGridFoundationBuilder.BuildSampleDeveloperToolSnapshot()
            Dim foundationReady As Boolean = sample IsNot Nothing AndAlso
                                             sample.ReadyForObjectPropertyEditing AndAlso
                                             sample.HasBooleanEditing AndAlso
                                             sample.HasTextEditing

            Return New MASPropertyGridReadinessManifest(
                If(foundationReady, MASPropertyGridReadinessStatus.Ready, MASPropertyGridReadinessStatus.MissingFoundation),
                hasPublicControl:=True,
                hasObjectInspectionFoundation:=foundationReady,
                hasEditCommitFoundation:=foundationReady,
                hasFriendRenderer:=True,
                hasArchitectureRegistration:=True,
                hasNoDemoDependency:=True,
                hasNoParallelPropertySystem:=True)
        End Function

    End Class

End Namespace
