Option Strict On
Option Explicit On

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

Namespace Nexamas.UI.Virtualization

    ''' <summary>
    ''' Result of the current-control virtualization integration audit. It confirms that item-heavy Nexamas UI surfaces are known
    ''' to the platform before DataGrid consumes the same foundation.
    ''' </summary>
    Friend NotInheritable Class MASVirtualizationIntegrationReport

        Private ReadOnly _bindings As IReadOnlyList(Of MASVirtualizationConsumerBinding)
        Private ReadOnly _findings As IReadOnlyList(Of MASVirtualizationReadinessFinding)

        Friend Sub New(bindings As IEnumerable(Of MASVirtualizationConsumerBinding),
                       findings As IEnumerable(Of MASVirtualizationReadinessFinding))
            _bindings = New ReadOnlyCollection(Of MASVirtualizationConsumerBinding)(If(bindings, Enumerable.Empty(Of MASVirtualizationConsumerBinding)()).Where(Function(binding) binding IsNot Nothing).ToArray())
            _findings = New ReadOnlyCollection(Of MASVirtualizationReadinessFinding)(If(findings, Enumerable.Empty(Of MASVirtualizationReadinessFinding)()).Where(Function(finding) finding IsNot Nothing).ToArray())
        End Sub

        Friend ReadOnly Property Bindings As IReadOnlyList(Of MASVirtualizationConsumerBinding)
            Get
                Return _bindings
            End Get
        End Property

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

        Friend ReadOnly Property ConsumerCount As Integer
            Get
                Return _bindings.Count
            End Get
        End Property

        Friend ReadOnly Property ActiveSharedControllerConsumerCount As Integer
            Get
                Return Global.System.Linq.Enumerable.Count(_bindings, Function(binding) binding.ConsumesSharedController AndAlso binding.Stage = MASVirtualizationIntegrationStage.ActiveSharedControllerConsumer)
            End Get
        End Property

        Friend ReadOnly Property ComposedSharedControllerConsumerCount As Integer
            Get
                Return Global.System.Linq.Enumerable.Count(_bindings, Function(binding) binding.IsComposedSharedControllerConsumer)
            End Get
        End Property

        Friend ReadOnly Property SharedControllerConsumerCount As Integer
            Get
                Return Global.System.Linq.Enumerable.Count(_bindings, Function(binding) binding.IsActiveOrComposedSharedControllerConsumer)
            End Get
        End Property

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

    End Class

End Namespace
