Option Strict On
Option Explicit On

Imports System.Collections
Imports System.Collections.Generic

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Public root-node collection exposed by MASTreeView. Mutation methods route through the owning tree so selection, scroll, and visual state remain synchronized.
    ''' </summary>
    Public NotInheritable Class MASTreeNodeCollection
        Implements IReadOnlyList(Of MASTreeNode)

        Private ReadOnly _owner As MASTreeView
        Private ReadOnly _items As List(Of MASTreeNode)

        Friend Sub New(owner As MASTreeView, items As List(Of MASTreeNode))
            _owner = owner
            _items = items
        End Sub

        Default Public ReadOnly Property Item(index As Integer) As MASTreeNode Implements IReadOnlyList(Of MASTreeNode).Item
            Get
                Return _items(index)
            End Get
        End Property

        Public ReadOnly Property Count As Integer Implements IReadOnlyCollection(Of MASTreeNode).Count
            Get
                Return _items.Count
            End Get
        End Property

        Public Function Add(text As String) As MASTreeNode
            Dim node As New MASTreeNode(text)
            Add(node)
            Return node
        End Function

        Public Sub Add(node As MASTreeNode)
            If node Is Nothing Then Return
            _owner.AddRootInternal(node)
        End Sub

        Public Function Remove(node As MASTreeNode) As Boolean
            If node Is Nothing Then Return False
            Return _owner.RemoveRootInternal(node)
        End Function

        Public Sub Clear()
            _owner.ClearNodesInternal()
        End Sub

        Public Function Contains(node As MASTreeNode) As Boolean
            Return _items.Contains(node)
        End Function

        Public Function IndexOf(node As MASTreeNode) As Integer
            Return _items.IndexOf(node)
        End Function

        Public Function GetEnumerator() As IEnumerator(Of MASTreeNode) Implements IEnumerable(Of MASTreeNode).GetEnumerator
            Return _items.GetEnumerator()
        End Function

        Private Function IEnumerable_GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
            Return _items.GetEnumerator()
        End Function

    End Class

End Namespace