Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Friend-only governance probe for MASMasterDetailView retained view snapshot.
    ''' It proves visual items, selection, and master viewport can be exported/restored
    ''' without introducing storage, router, provider, or object inspector ownership.
    ''' </summary>
    Friend NotInheritable Class MASMasterDetailViewPersistenceGate
        Private Sub New()
        End Sub

        Friend Shared Function Passes() As Boolean
            Try
                If Not MASMasterDetailViewPolicy.HasViewSnapshotPersistencePath() Then Return False

                Dim view As MASMasterDetailView = MASMasterDetailView.Create("Snapshot master detail")
                For i As Integer = 1 To 12
                    view.AddItem("item-" & i.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                 "Item " & i.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                 "Subtitle " & i.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                 "Detail " & i.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                 "Body " & i.ToString(System.Globalization.CultureInfo.InvariantCulture),
                                 "B" & i.ToString(System.Globalization.CultureInfo.InvariantCulture))
                Next
                If Not view.SelectItem("item-9") Then Return False
                view.MoveNext()
                view.MovePrevious()
                Dim snapshot As MASMasterDetailViewSnapshot = view.CreateViewSnapshot()
                If snapshot Is Nothing OrElse snapshot.Items.Count <> 12 Then Return False
                If snapshot.SelectedItemKey <> "item-9" Then Return False
                If Not view.HasViewSnapshotForTests() Then Return False

                Dim restored As MASMasterDetailView = MASMasterDetailView.Create("Restored")
                If Not restored.RestoreViewSnapshot(snapshot) Then Return False
                If restored.ItemCount <> 12 Then Return False
                If restored.SelectedItemKey <> "item-9" Then Return False
                If restored.CreateViewSnapshot().Items.Count <> 12 Then Return False

                restored.ResetMasterViewport()
                If restored.CreateViewSnapshot().TopIndex <> 0 Then Return False

                Return True
            Catch ex As Exception
                Nexamas.UI.Diagnostics.MASExceptionSilencer.SwallowDiagnosticOnly(ex, "MASMasterDetailViewPersistenceGate")
                Return False
            End Try
        End Function
    End Class

End Namespace
