Option Strict On
Option Explicit On

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Friend-only proof that MASDashboardGrid can snapshot and restore widget
    ''' layout, reorder widgets, and persist span changes without becoming chart,
    ''' data-refresh, provider, shell-layout, or external storage infrastructure.
    ''' </summary>
    Friend NotInheritable Class MASDashboardGridLayoutPersistenceGate
        Private Sub New()
        End Sub

        Friend Shared Function Passes() As Boolean
            Try
                If Not MASDashboardGridPolicy.HasLayoutSnapshotPersistencePath() Then Return False
                If Not MASDashboardGridPolicy.HasWidgetReorderResizePath() Then Return False

                Dim grid As MASDashboardGrid = MASDashboardGrid.Create("Gate dashboard")
                grid.AddWidget("sales", "Sales", "100", "Today", 1, 1)
                grid.AddWidget("orders", "Orders", "12", "Open", 1, 1)
                grid.AddWidget("margin", "Margin", "42%", "Week", 1, 1)
                If Not grid.SelectWidget("orders") Then Return False
                If Not grid.ResizeWidget("orders", 2, 1) Then Return False
                If Not grid.MoveWidget("margin", 0) Then Return False

                Dim snapshot As MASDashboardGridLayoutSnapshot = grid.CreateLayoutSnapshot()
                If snapshot Is Nothing Then Return False
                If snapshot.Widgets.Count <> 3 Then Return False
                If snapshot.Widgets(0).Key <> "margin" Then Return False
                If snapshot.SelectedWidgetKey <> "orders" Then Return False
                If snapshot.Widgets(2).SpanColumns <> 2 Then Return False

                Dim restored As MASDashboardGrid = MASDashboardGrid.Create("empty")
                If Not restored.RestoreLayoutSnapshot(snapshot) Then Return False
                Dim keys As System.Collections.Generic.IReadOnlyList(Of String) = restored.GetWidgetKeys()
                If keys.Count <> 3 Then Return False
                If keys(0) <> "margin" OrElse keys(2) <> "orders" Then Return False
                If restored.SelectedWidgetKey <> "orders" Then Return False
                If Not restored.HasLayoutSnapshotForTests() Then Return False

                Dim emptySnapshot As MASDashboardGridLayoutSnapshot = restored.ClearWidgets().CreateLayoutSnapshot()
                If emptySnapshot.Widgets.Count <> 0 Then Return False
                If Not restored.RestoreLayoutSnapshot(snapshot) Then Return False
                If restored.ItemCount <> 3 Then Return False

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

End Namespace
