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 CreateSplitView(Optional title As String = Nothing,
                                        Optional configure As Action(Of MASSplitView) = Nothing) As MASSplitView
            Return ConfigureControl(MASSplitView.Create(title), configure)
        End Function

        Public Function AddSplitView(Optional title As String = Nothing,
                                     Optional configure As Action(Of MASSplitView) = Nothing) As MASSplitView
            Return AddCreatedControlInternal(CreateSplitView(title, configure))
        End Function

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

        Public Function AddAppLayout(Optional title As String = Nothing,
                                     Optional configure As Action(Of MASAppLayout) = Nothing) As MASAppLayout
            Return AddCreatedControlInternal(CreateAppLayout(title, configure))
        End Function

        Friend Function CreateGroupBox(Optional title As String = Nothing,
                                       Optional configure As Action(Of MASGroupBox) = Nothing) As MASGroupBox
            Dim control As MASGroupBox = If(String.IsNullOrWhiteSpace(title), MASGroupBox.Create(), MASGroupBox.Create(title))
            Return ConfigureControl(control, configure)
        End Function

        Public Function AddGroupBox(Optional title As String = Nothing,
                                    Optional configure As Action(Of MASGroupBox) = Nothing) As MASGroupBox
            Return AddCreatedControlInternal(CreateGroupBox(title, configure))
        End Function

        Friend Function CreateExpander(Optional title As String = Nothing,
                                       Optional expanded As Boolean = True,
                                       Optional configure As Action(Of MASExpander) = Nothing) As MASExpander
            Dim control As MASExpander = MASExpander.Create(title, expanded)
            Return ConfigureControl(control, configure)
        End Function

        Public Function AddExpander(Optional title As String = Nothing,
                                    Optional expanded As Boolean = True,
                                    Optional configure As Action(Of MASExpander) = Nothing) As MASExpander
            Return AddCreatedControlInternal(CreateExpander(title, expanded, configure))
        End Function

        Friend Function CreateAccordion(Optional allowMultipleExpanded As Boolean = False,
                                        Optional configure As Action(Of MASAccordion) = Nothing) As MASAccordion
            Dim control As MASAccordion = MASAccordion.Create(allowMultipleExpanded)
            Return ConfigureControl(control, configure)
        End Function

        Public Function AddAccordion(Optional allowMultipleExpanded As Boolean = False,
                                     Optional configure As Action(Of MASAccordion) = Nothing) As MASAccordion
            Return AddCreatedControlInternal(CreateAccordion(allowMultipleExpanded, configure))
        End Function

        Friend Function CreateStepper(Optional orientation As MASStepperOrientation = MASStepperOrientation.Horizontal,
                                      Optional configure As Action(Of MASStepper) = Nothing) As MASStepper
            Dim control As MASStepper = MASStepper.Create(orientation)
            Return ConfigureControl(control, configure)
        End Function

        Public Function AddStepper(Optional orientation As MASStepperOrientation = MASStepperOrientation.Horizontal,
                                   Optional configure As Action(Of MASStepper) = Nothing) As MASStepper
            Return AddCreatedControlInternal(CreateStepper(orientation, configure))
        End Function

        Friend Function CreateWizard(Optional orientation As MASStepperOrientation = MASStepperOrientation.Horizontal,
                                     Optional configure As Action(Of MASWizard) = Nothing) As MASWizard
            Dim control As MASWizard = MASWizard.Create(orientation)
            Return ConfigureControl(control, configure)
        End Function

        Public Function AddWizard(Optional orientation As MASStepperOrientation = MASStepperOrientation.Horizontal,
                                  Optional configure As Action(Of MASWizard) = Nothing) As MASWizard
            Return AddCreatedControlInternal(CreateWizard(orientation, configure))
        End Function

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

        Public Function AddTileBox(Optional configure As Action(Of MASTileBox) = Nothing) As MASTileBox
            Return AddCreatedControlInternal(CreateTileBox(configure))
        End Function

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

        Public Function AddLabel(Optional text As String = Nothing,
                                 Optional configure As Action(Of MASLabel) = Nothing) As MASLabel
            Return AddCreatedControlInternal(CreateLabel(text, configure))
        End Function

        Friend Function CreateTitle(text As String,
                                    Optional configure As Action(Of MASTitle) = Nothing) As MASTitle
            Return ConfigureControl(MASTitle.Create(If(text, String.Empty)), configure)
        End Function

        Public Function AddTitle(text As String,
                                 Optional configure As Action(Of MASTitle) = Nothing) As MASTitle
            Return AddCreatedControlInternal(CreateTitle(text, configure))
        End Function
    End Class

End Namespace
