Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Generic
Imports Nexamas.UI.Components

Namespace Nexamas.UI.Quality

    ''' <summary>
    ''' Friend-only closure gate for Targeted Closure Phase 5. It closes the
    ''' DashboardGrid public-provider-adapter policy gap and the AppLayout/SplitView
    ''' host-adoption proof gaps without creating a router, native shell, public
    ''' adapter, or external provider surface.
    ''' </summary>
    Friend NotInheritable Class MASDashboardProviderHostAdoptionClosureGate

        Private Sub New()
        End Sub

        Friend Shared Function Passes() As Boolean
            Return EvaluateFindings().Count = 0
        End Function

        Friend Shared Function EvaluateFindings() As IReadOnlyList(Of MASCommercialReadinessFinding)
            Dim findings As New List(Of MASCommercialReadinessFinding)()
            ValidateDashboardProviderAdapterPolicy(findings)
            ValidateAppLayoutHostAdoption(findings)
            ValidateSplitViewHostAdoption(findings)
            Return findings
        End Function

        Private Shared Sub ValidateDashboardProviderAdapterPolicy(findings As List(Of MASCommercialReadinessFinding))
            Try
                Dim control As MASDashboardGrid = MASDashboardGrid.Create("Provider adapter policy proof")
                If Not control.HasProviderAdapterPolicyForTests() Then
                    findings.Add(New MASCommercialReadinessFinding("dashboardgrid", "DashboardGrid.PublicProviderAdapter", MASCommercialReadinessFindingSeverity.Error, "DashboardGrid provider adapter policy did not prove internal-only provider refresh with no public adapter, storage, or shell refresh ownership."))
                End If
            Catch ex As Exception
                Nexamas.UI.Diagnostics.MASExceptionSilencer.SwallowDiagnosticOnly(ex, "MASDashboardProviderHostAdoptionClosureGate.DashboardGrid")
                findings.Add(New MASCommercialReadinessFinding("dashboardgrid", "DashboardGrid.PublicProviderAdapter", MASCommercialReadinessFindingSeverity.Error, "DashboardGrid provider adapter policy threw during validation."))
            End Try
        End Sub

        Private Shared Sub ValidateAppLayoutHostAdoption(findings As List(Of MASCommercialReadinessFinding))
            Try
                Dim control As MASAppLayout = MASAppLayout.Create("Responsive shell adoption proof")
                If Not control.HasResponsiveShellHostAdoptionForTests() Then
                    findings.Add(New MASCommercialReadinessFinding("applayout", "AppLayout.ResponsiveShellAdoption", MASCommercialReadinessFindingSeverity.Error, "AppLayout host adoption proof did not prove safe host-owned responsive shell adoption."))
                End If
            Catch ex As Exception
                Nexamas.UI.Diagnostics.MASExceptionSilencer.SwallowDiagnosticOnly(ex, "MASDashboardProviderHostAdoptionClosureGate.AppLayout")
                findings.Add(New MASCommercialReadinessFinding("applayout", "AppLayout.ResponsiveShellAdoption", MASCommercialReadinessFindingSeverity.Error, "AppLayout host adoption proof threw during validation."))
            End Try
        End Sub

        Private Shared Sub ValidateSplitViewHostAdoption(findings As List(Of MASCommercialReadinessFinding))
            Try
                Dim control As MASSplitView = MASSplitView.Create("Host adoption proof")
                If Not control.HasHostAdoptionProofForTests() Then
                    findings.Add(New MASCommercialReadinessFinding("splitview", "SplitView.HostAdoptionProof", MASCommercialReadinessFindingSeverity.Error, "SplitView host adoption proof did not prove safe host-owned persistence/focus/announcement adoption."))
                End If
            Catch ex As Exception
                Nexamas.UI.Diagnostics.MASExceptionSilencer.SwallowDiagnosticOnly(ex, "MASDashboardProviderHostAdoptionClosureGate.SplitView")
                findings.Add(New MASCommercialReadinessFinding("splitview", "SplitView.HostAdoptionProof", MASCommercialReadinessFindingSeverity.Error, "SplitView host adoption proof threw during validation."))
            End Try
        End Sub

    End Class

End Namespace
