Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Friend-only evidence for MASDatePicker round-01 refinement. The manifest records that
    ''' date selection stays on the official trigger + Friend calendar view + FloatRuntime route,
    ''' with culture parsing/formatting and keyboard/range policy owned by the DatePicker itself.
    ''' </summary>
    Friend NotInheritable Class MASDatePickerReadinessManifest
        Private Sub New(status As MASDatePickerReadinessStatus,
                        controlName As String,
                        hasOfficialFloatPopup As Boolean,
                        hasFriendCalendarContent As Boolean,
                        hasCultureDisplayAndParse As Boolean,
                        hasKeyboardDateTraversal As Boolean,
                        hasRangeClampPolicy As Boolean,
                        hasMonthYearSelector As Boolean,
                        hasTwoHundredYearWindowPolicy As Boolean,
                        hasNoParallelCalendarOrNativeWrapper As Boolean)
            Me.Status = status
            Me.ControlName = If(controlName, String.Empty)
            Me.HasOfficialFloatPopup = hasOfficialFloatPopup
            Me.HasFriendCalendarContent = hasFriendCalendarContent
            Me.HasCultureDisplayAndParse = hasCultureDisplayAndParse
            Me.HasKeyboardDateTraversal = hasKeyboardDateTraversal
            Me.HasRangeClampPolicy = hasRangeClampPolicy
            Me.HasMonthYearSelector = hasMonthYearSelector
            Me.HasTwoHundredYearWindowPolicy = hasTwoHundredYearWindowPolicy
            Me.HasNoParallelCalendarOrNativeWrapper = hasNoParallelCalendarOrNativeWrapper
        End Sub

        Friend ReadOnly Property Status As MASDatePickerReadinessStatus
        Friend ReadOnly Property ControlName As String
        Friend ReadOnly Property HasOfficialFloatPopup As Boolean
        Friend ReadOnly Property HasFriendCalendarContent As Boolean
        Friend ReadOnly Property HasCultureDisplayAndParse As Boolean
        Friend ReadOnly Property HasKeyboardDateTraversal As Boolean
        Friend ReadOnly Property HasRangeClampPolicy As Boolean
        Friend ReadOnly Property HasMonthYearSelector As Boolean
        Friend ReadOnly Property HasTwoHundredYearWindowPolicy As Boolean
        Friend ReadOnly Property HasNoParallelCalendarOrNativeWrapper As Boolean

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Status = MASDatePickerReadinessStatus.Ready AndAlso
                       HasOfficialFloatPopup AndAlso
                       HasFriendCalendarContent AndAlso
                       HasCultureDisplayAndParse AndAlso
                       HasKeyboardDateTraversal AndAlso
                       HasRangeClampPolicy AndAlso
                       HasMonthYearSelector AndAlso
                       HasTwoHundredYearWindowPolicy AndAlso
                       HasNoParallelCalendarOrNativeWrapper
            End Get
        End Property

        Friend Shared Function CreateCurrent() As MASDatePickerReadinessManifest
            Return New MASDatePickerReadinessManifest(
                status:=MASDatePickerReadinessStatus.Ready,
                controlName:="MASDatePicker",
                hasOfficialFloatPopup:=True,
                hasFriendCalendarContent:=True,
                hasCultureDisplayAndParse:=True,
                hasKeyboardDateTraversal:=True,
                hasRangeClampPolicy:=True,
                hasMonthYearSelector:=True,
                hasTwoHundredYearWindowPolicy:=True,
                hasNoParallelCalendarOrNativeWrapper:=True)
        End Function
    End Class

End Namespace
