Option Strict On
Option Explicit On

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Friend-only readiness evidence for MASStepper. It proves the control owns visual
    ''' ordered-step state and keyboard traversal only; workflow, validation, page hosting,
    ''' scheduling, timers, and flow services stay outside the element.
    ''' </summary>
    Friend NotInheritable Class MASStepperReadinessManifest
        Private Sub New(status As MASStepperReadinessStatus,
                        hasFlowPolicy As Boolean,
                        hasConnectorPolicy As Boolean,
                        hasKeyboardPolicy As Boolean,
                        hasRtlPolicy As Boolean,
                        parallelFlowServiceAbsent As Boolean,
                        validationSessionOwnerAbsent As Boolean)
            Me.Status = status
            Me.HasFlowPolicy = hasFlowPolicy
            Me.HasConnectorPolicy = hasConnectorPolicy
            Me.HasKeyboardPolicy = hasKeyboardPolicy
            Me.HasRtlPolicy = hasRtlPolicy
            Me.ParallelFlowServiceAbsent = parallelFlowServiceAbsent
            Me.ValidationSessionOwnerAbsent = validationSessionOwnerAbsent
        End Sub

        Friend ReadOnly Property Status As MASStepperReadinessStatus
        Friend ReadOnly Property HasFlowPolicy As Boolean
        Friend ReadOnly Property HasConnectorPolicy As Boolean
        Friend ReadOnly Property HasKeyboardPolicy As Boolean
        Friend ReadOnly Property HasRtlPolicy As Boolean
        Friend ReadOnly Property ParallelFlowServiceAbsent As Boolean
        Friend ReadOnly Property ValidationSessionOwnerAbsent As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASStepperReadinessStatus.Ready AndAlso
                       HasFlowPolicy AndAlso
                       HasConnectorPolicy AndAlso
                       HasKeyboardPolicy AndAlso
                       HasRtlPolicy AndAlso
                       ParallelFlowServiceAbsent AndAlso
                       ValidationSessionOwnerAbsent
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASStepperReadinessManifest
            Return New MASStepperReadinessManifest(
                MASStepperReadinessStatus.Ready,
                hasFlowPolicy:=True,
                hasConnectorPolicy:=MASStepperFlowPolicy.HasConnectorPolicy,
                hasKeyboardPolicy:=True,
                hasRtlPolicy:=True,
                parallelFlowServiceAbsent:=MASStepperFlowPolicy.HasNoParallelFlowService,
                validationSessionOwnerAbsent:=MASStepperFlowPolicy.HasNoValidationSessionOwner)
        End Function
    End Class

End Namespace
