Option Strict On
Option Explicit On

Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System.Linq

Namespace Nexamas.UI.Virtualization

    ''' <summary>
    ''' Gate report for MASVirtualizedItemsSystem options. The report is diagnostic-only and does not allocate containers.
    ''' </summary>
    Friend NotInheritable Class MASVirtualizationReadinessReport

        Private ReadOnly _findings As ReadOnlyCollection(Of MASVirtualizationReadinessFinding)

        Friend Sub New(itemCount As Integer,
                       estimatedItemExtentPx As Single,
                       overscanItemCount As Integer,
                       findings As IEnumerable(Of MASVirtualizationReadinessFinding),
                       Optional extentStrategy As MASVirtualizationExtentStrategy = MASVirtualizationExtentStrategy.EstimatedWithMeasuredOverrides)
            Me.ItemCount = itemCount
            Me.EstimatedItemExtentPx = estimatedItemExtentPx
            Me.OverscanItemCount = overscanItemCount
            Me.ExtentStrategy = extentStrategy
            _findings = New ReadOnlyCollection(Of MASVirtualizationReadinessFinding)(If(findings, Enumerable.Empty(Of MASVirtualizationReadinessFinding)()).Where(Function(finding) finding IsNot Nothing).ToArray())
        End Sub

        Friend ReadOnly Property ItemCount As Integer
        Friend ReadOnly Property EstimatedItemExtentPx As Single
        Friend ReadOnly Property OverscanItemCount As Integer
        Friend ReadOnly Property ExtentStrategy As MASVirtualizationExtentStrategy

        Friend ReadOnly Property Findings As IReadOnlyList(Of MASVirtualizationReadinessFinding)
            Get
                Return _findings
            End Get
        End Property

        Friend ReadOnly Property IsReady As Boolean
            Get
                Return Not _findings.Any(Function(finding) finding.Severity = MASVirtualizationFindingSeverity.Error)
            End Get
        End Property

    End Class

End Namespace
