Option Strict On
Option Explicit On

Namespace Nexamas.UI.SearchBoxSystem

    ''' <summary>
    ''' Friend-owned readiness manifest proving that MASSearchTextBox Advanced extends the official
    ''' SearchBox, DataBinding, and DataGrid routes without creating a parallel search subsystem.
    ''' </summary>
    Friend NotInheritable Class MASSearchBoxAdvancedReadinessManifest

        Private Sub New(status As MASSearchBoxAdvancedReadinessStatus,
                        hasSuggestionRoute As Boolean,
                        hasRecentSearchRoute As Boolean,
                        hasFilterRoute As Boolean,
                        hasDataGridBindingRoute As Boolean,
                        hasViewModelBindingTargetRoute As Boolean,
                        hasNoParallelSearchPath As Boolean)

            Me.Status = status
            Me.HasSuggestionRoute = hasSuggestionRoute
            Me.HasRecentSearchRoute = hasRecentSearchRoute
            Me.HasFilterRoute = hasFilterRoute
            Me.HasDataGridBindingRoute = hasDataGridBindingRoute
            Me.HasViewModelBindingTargetRoute = hasViewModelBindingTargetRoute
            Me.HasNoParallelSearchPath = hasNoParallelSearchPath
        End Sub

        Friend ReadOnly Property Status As MASSearchBoxAdvancedReadinessStatus
        Friend ReadOnly Property HasSuggestionRoute As Boolean
        Friend ReadOnly Property HasRecentSearchRoute As Boolean
        Friend ReadOnly Property HasFilterRoute As Boolean
        Friend ReadOnly Property HasDataGridBindingRoute As Boolean
        Friend ReadOnly Property HasViewModelBindingTargetRoute As Boolean
        Friend ReadOnly Property HasNoParallelSearchPath As Boolean

        Friend ReadOnly Property ReadyForAdvancedSearchBox As Boolean
            Get
                Return Status = MASSearchBoxAdvancedReadinessStatus.Ready
            End Get
        End Property

        Friend Shared Function Create(hasSuggestionRoute As Boolean,
                                      hasRecentSearchRoute As Boolean,
                                      hasFilterRoute As Boolean,
                                      hasDataGridBindingRoute As Boolean,
                                      hasViewModelBindingTargetRoute As Boolean,
                                      hasNoParallelSearchPath As Boolean) As MASSearchBoxAdvancedReadinessManifest

            Dim status As MASSearchBoxAdvancedReadinessStatus = MASSearchBoxAdvancedReadinessStatus.Ready

            If Not hasNoParallelSearchPath Then
                status = MASSearchBoxAdvancedReadinessStatus.ParallelSearchPathDetected
            ElseIf Not hasSuggestionRoute Then
                status = MASSearchBoxAdvancedReadinessStatus.MissingSuggestionRoute
            ElseIf Not hasRecentSearchRoute Then
                status = MASSearchBoxAdvancedReadinessStatus.MissingRecentSearchRoute
            ElseIf Not hasFilterRoute Then
                status = MASSearchBoxAdvancedReadinessStatus.MissingFilterRoute
            ElseIf Not hasDataGridBindingRoute Then
                status = MASSearchBoxAdvancedReadinessStatus.MissingDataGridRoute
            ElseIf Not hasViewModelBindingTargetRoute Then
                status = MASSearchBoxAdvancedReadinessStatus.MissingBindingRoute
            End If

            Return New MASSearchBoxAdvancedReadinessManifest(status,
                                                            hasSuggestionRoute,
                                                            hasRecentSearchRoute,
                                                            hasFilterRoute,
                                                            hasDataGridBindingRoute,
                                                            hasViewModelBindingTargetRoute,
                                                            hasNoParallelSearchPath)
        End Function

    End Class

End Namespace
