Option Strict On
Option Explicit On

Imports System

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Friend-only governance probe for MASAgendaView range foundations. It proves
    ''' that AddEvent preserves event days, week/month ranges derive stable cells,
    ''' range navigation changes by the active view mode, and day view filtering keeps
    ''' the timed layout scoped to the selected day.
    ''' </summary>
    Friend NotInheritable Class MASAgendaViewRangeViewsGate
        Private Sub New()
        End Sub

        Friend Shared Function Passes() As Boolean
            Try
                If Not MASAgendaViewPolicy.HasEventDayOwnershipPath() Then Return False
                If Not MASAgendaViewPolicy.HasWeekMonthRangeViewPath() Then Return False

                Dim anchor As New Date(2026, 2, 11)
                Dim agenda As MASAgendaView = MASAgendaView.Create("Range gate", anchor).WithHours(8, 18)
                agenda.AddEvent("anchor", "Anchor day", anchor.AddHours(9), anchor.AddHours(10), "Visible in day/week/month")
                agenda.AddEvent("next", "Next day", anchor.AddDays(1).AddHours(11), anchor.AddDays(1).AddHours(12), "Week and month only")
                agenda.AddEvent("outside", "Outside month", anchor.AddMonths(1).AddHours(9), anchor.AddMonths(1).AddHours(10), "Outside active month")

                Dim dayEvidence = agenda.CreateTimedLayoutEvidenceForTests(760.0F, 420.0F, 1.0F, False)
                If dayEvidence.Count <> 1 Then Return False
                If dayEvidence(0).EventKey <> "anchor" Then Return False

                Dim weekEvidence As MASAgendaView.AgendaRangeViewEvidence = agenda.CreateRangeViewEvidenceForTests(MASAgendaViewMode.Week)
                If weekEvidence.Mode <> MASAgendaViewMode.Week Then Return False
                If weekEvidence.CellCount <> 7 Then Return False
                If Not (anchor >= weekEvidence.RangeStart AndAlso anchor <= weekEvidence.RangeEnd) Then Return False
                If weekEvidence.VisibleEventCount <> 2 Then Return False

                Dim monthEvidence As MASAgendaView.AgendaRangeViewEvidence = agenda.CreateRangeViewEvidenceForTests(MASAgendaViewMode.Month)
                If monthEvidence.Mode <> MASAgendaViewMode.Month Then Return False
                If monthEvidence.CellCount <> 42 Then Return False
                If monthEvidence.VisibleEventCount <> 2 Then Return False
                If monthEvidence.RangeStart > New Date(anchor.Year, anchor.Month, 1) Then Return False

                agenda.ViewMode = MASAgendaViewMode.Week
                agenda.MoveNextRange()
                If agenda.Day <> anchor.AddDays(7) Then Return False
                agenda.ViewMode = MASAgendaViewMode.Month
                agenda.MoveNextRange()
                If agenda.Day <> anchor.AddDays(7).AddMonths(1) Then Return False

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

End Namespace
