Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Friend-only readiness evidence for the visual Timeline control. The manifest records
    ''' that Timeline is a premium display surface only and does not own audit persistence,
    ''' workflow engines, schedulers, live feeds, notification queues, or history services.
    ''' </summary>
    Friend NotInheritable Class MASTimelineReadinessManifest
        Private Sub New(status As MASTimelineReadinessStatus,
                        hasPublicControlSurface As Boolean,
                        hasArchitectureRegistration As Boolean,
                        hasApplicationFactoryRoute As Boolean,
                        hasVisualPolicy As Boolean,
                        hasKeyboardSelectionPolicy As Boolean,
                        hasLargeListCeiling As Boolean,
                        hasNoParallelHistoryPath As Boolean,
                        hasNoRunnerOrSchedulerPath As Boolean)
            Me.Status = status
            Me.HasPublicControlSurface = hasPublicControlSurface
            Me.HasArchitectureRegistration = hasArchitectureRegistration
            Me.HasApplicationFactoryRoute = hasApplicationFactoryRoute
            Me.HasVisualPolicy = hasVisualPolicy
            Me.HasKeyboardSelectionPolicy = hasKeyboardSelectionPolicy
            Me.HasLargeListCeiling = hasLargeListCeiling
            Me.HasNoParallelHistoryPath = hasNoParallelHistoryPath
            Me.HasNoRunnerOrSchedulerPath = hasNoRunnerOrSchedulerPath
        End Sub

        Friend ReadOnly Property Status As MASTimelineReadinessStatus
        Friend ReadOnly Property HasPublicControlSurface As Boolean
        Friend ReadOnly Property HasArchitectureRegistration As Boolean
        Friend ReadOnly Property HasApplicationFactoryRoute As Boolean
        Friend ReadOnly Property HasVisualPolicy As Boolean
        Friend ReadOnly Property HasKeyboardSelectionPolicy As Boolean
        Friend ReadOnly Property HasLargeListCeiling As Boolean
        Friend ReadOnly Property HasNoParallelHistoryPath As Boolean
        Friend ReadOnly Property HasNoRunnerOrSchedulerPath As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASTimelineReadinessStatus.Ready AndAlso
                       HasPublicControlSurface AndAlso
                       HasArchitectureRegistration AndAlso
                       HasApplicationFactoryRoute AndAlso
                       HasVisualPolicy AndAlso
                       HasKeyboardSelectionPolicy AndAlso
                       HasLargeListCeiling AndAlso
                       HasNoParallelHistoryPath AndAlso
                       HasNoRunnerOrSchedulerPath
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASTimelineReadinessManifest
            Return New MASTimelineReadinessManifest(
                MASTimelineReadinessStatus.Ready,
                hasPublicControlSurface:=True,
                hasArchitectureRegistration:=True,
                hasApplicationFactoryRoute:=True,
                hasVisualPolicy:=True,
                hasKeyboardSelectionPolicy:=True,
                hasLargeListCeiling:=True,
                hasNoParallelHistoryPath:=MASTimelineVisualPolicy.HasNoParallelHistoryPath,
                hasNoRunnerOrSchedulerPath:=MASTimelineVisualPolicy.HasNoRunnerOrSchedulerPath)
        End Function
    End Class

End Namespace
