Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports Nexamas.UI.Components
Imports Nexamas.UI.Controls
Imports Nexamas.UI.Host
Imports Nexamas.UI.Layout
Imports Nexamas.UI.Theming
Imports Nexamas.UI.TextInput
Imports Nexamas.UI.Values
Imports SkiaSharp

Namespace Nexamas.UI.Application

    Partial Public NotInheritable Class MASApplicationWindowControls

        Friend Function CreateTransferList(Optional availableItems As IEnumerable(Of String) = Nothing,
                                           Optional selectedItems As IEnumerable(Of String) = Nothing,
                                           Optional configure As Action(Of MASTransferList) = Nothing) As MASTransferList
            Return ConfigureControl(MASTransferList.Create(availableItems, selectedItems), configure)
        End Function

        Public Function AddTransferList(Optional availableItems As IEnumerable(Of String) = Nothing,
                                        Optional selectedItems As IEnumerable(Of String) = Nothing,
                                        Optional configure As Action(Of MASTransferList) = Nothing) As MASTransferList
            Return AddCreatedControlInternal(CreateTransferList(availableItems, selectedItems, configure))
        End Function

        Friend Function CreateContentCarousel(Optional title As String = Nothing,
                                              Optional configure As Action(Of MASContentCarousel) = Nothing) As MASContentCarousel
            Return ConfigureControl(MASContentCarousel.Create(title), configure)
        End Function

        Public Function AddContentCarousel(Optional title As String = Nothing,
                                           Optional configure As Action(Of MASContentCarousel) = Nothing) As MASContentCarousel
            Return AddCreatedControlInternal(CreateContentCarousel(title, configure))
        End Function

        Friend Function CreateNavigationRail(Optional title As String = Nothing,
                                             Optional configure As Action(Of MASNavigationRail) = Nothing) As MASNavigationRail
            Return ConfigureControl(MASNavigationRail.Create(title), configure)
        End Function

        Public Function AddNavigationRail(Optional title As String = Nothing,
                                          Optional configure As Action(Of MASNavigationRail) = Nothing) As MASNavigationRail
            Return AddCreatedControlInternal(CreateNavigationRail(title, configure))
        End Function

        Friend Function CreateCommandPalette(Optional title As String = Nothing,
                                             Optional configure As Action(Of MASCommandPalette) = Nothing) As MASCommandPalette
            Return ConfigureControl(MASCommandPalette.Create(title), configure)
        End Function

        Public Function AddCommandPalette(Optional title As String = Nothing,
                                          Optional configure As Action(Of MASCommandPalette) = Nothing) As MASCommandPalette
            Return AddCreatedControlInternal(CreateCommandPalette(title, configure))
        End Function

        ''' <summary>
        ''' Public consumer gateway for the standard full-width application MainMenuBar.
        ''' The menu bar is attached to the shell-owned chrome slot below the TopBar; it is
        ''' not admitted into the page/direct controls layer even though it follows the
        ''' Controls.Add* factory naming used by normal MAS components.
        ''' </summary>
        Public Function AddMenuBar(Optional configure As Action(Of MASMenuBar) = Nothing) As MASMenuBar
            Return _shell.AttachStandardMenuBar(configure)
        End Function

        Friend Function CreateBreadcrumb(Optional items As IEnumerable(Of String) = Nothing,
                                         Optional configure As Action(Of MASBreadcrumb) = Nothing) As MASBreadcrumb
            Return ConfigureControl(MASBreadcrumb.Create(items), configure)
        End Function

        Public Function AddBreadcrumb(Optional items As IEnumerable(Of String) = Nothing,
                                      Optional configure As Action(Of MASBreadcrumb) = Nothing) As MASBreadcrumb
            Return AddCreatedControlInternal(CreateBreadcrumb(items, configure))
        End Function

        Friend Function CreatePagination(Optional currentPage As Integer = 1,
                                         Optional totalPages As Integer = 1,
                                         Optional configure As Action(Of MASPagination) = Nothing) As MASPagination
            Return ConfigureControl(MASPagination.Create(currentPage, totalPages), configure)
        End Function

        Public Function AddPagination(Optional currentPage As Integer = 1,
                                      Optional totalPages As Integer = 1,
                                      Optional configure As Action(Of MASPagination) = Nothing) As MASPagination
            Return AddCreatedControlInternal(CreatePagination(currentPage, totalPages, configure))
        End Function

        Friend Function CreateTabControl(Optional configure As Action(Of MASTabControl) = Nothing) As MASTabControl
            Return ConfigureControl(MASTabControl.Create(), configure)
        End Function

        Public Function AddTabControl(Optional configure As Action(Of MASTabControl) = Nothing) As MASTabControl
            Return AddCreatedControlInternal(CreateTabControl(configure))
        End Function

        Friend Function CreateToolbar(Optional configure As Action(Of MASToolbar) = Nothing) As MASToolbar
            Return ConfigureControl(MASToolbar.Create(), configure)
        End Function

        Public Function AddToolbar(Optional configure As Action(Of MASToolbar) = Nothing) As MASToolbar
            Return AddCreatedControlInternal(CreateToolbar(configure))
        End Function

        Friend Function CreateCommandBar(Optional configure As Action(Of MASToolbar) = Nothing) As MASToolbar
            Dim toolbar As MASToolbar = MASToolbar.Create()
            toolbar.ApplyCommandBarDefaultsInternal()
            Return ConfigureControl(toolbar, configure)
        End Function

        Public Function AddCommandBar(Optional configure As Action(Of MASToolbar) = Nothing) As MASToolbar
            Return AddCreatedControlInternal(CreateCommandBar(configure))
        End Function

        Friend Function CreatePathDisplayBox(Optional text As String = Nothing,
                                             Optional configure As Action(Of MASPathDisplayBox) = Nothing) As MASPathDisplayBox
            Return ConfigureControl(MASPathDisplayBox.Create(text), configure)
        End Function

        Friend Function AddPathDisplayBox(Optional text As String = Nothing,
                                          Optional configure As Action(Of MASPathDisplayBox) = Nothing) As MASPathDisplayBox
            Return AddCreatedControlInternal(CreatePathDisplayBox(text, configure))
        End Function
    End Class

End Namespace
