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

        Public Function AddButton(Optional text As String = Nothing,
                                  Optional configure As Action(Of MASButton) = Nothing) As MASButton
            Return AddCreatedControlInternal(CreateButton(text, configure))
        End Function

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

        Public Function AddSplitButton(Optional text As String = Nothing,
                                       Optional configure As Action(Of MASSplitButton) = Nothing) As MASSplitButton
            Return AddCreatedControlInternal(CreateSplitButton(text, configure))
        End Function

        Friend Function CreateCheckBox(Optional text As String = Nothing,
                                       Optional checked As Boolean = False,
                                       Optional configure As Action(Of MASCheckBox) = Nothing) As MASCheckBox
            Return ConfigureControl(MASCheckBox.Create(text, checked), configure)
        End Function

        Public Function AddCheckBox(Optional text As String = Nothing,
                                    Optional checked As Boolean = False,
                                    Optional configure As Action(Of MASCheckBox) = Nothing) As MASCheckBox
            Return AddCreatedControlInternal(CreateCheckBox(text, checked, configure))
        End Function

        Friend Function CreateRadioButton(Optional text As String = Nothing,
                                          Optional groupName As String = Nothing,
                                          Optional checked As Boolean = False,
                                          Optional configure As Action(Of MASRadioButton) = Nothing) As MASRadioButton
            Dim control As MASRadioButton = MASRadioButton.Create().WithText(text)
            If Not String.IsNullOrEmpty(groupName) Then control.WithGroup(groupName)
            If checked Then control.CheckedState(True)
            Return ConfigureControl(control, configure)
        End Function

        Public Function AddRadioButton(Optional text As String = Nothing,
                                       Optional groupName As String = Nothing,
                                       Optional checked As Boolean = False,
                                       Optional configure As Action(Of MASRadioButton) = Nothing) As MASRadioButton
            Return AddCreatedControlInternal(CreateRadioButton(text, groupName, checked, configure))
        End Function

        Friend Function CreateToggleSwitch(Optional text As String = Nothing,
                                           Optional checked As Boolean = False,
                                           Optional configure As Action(Of MASToggleSwitch) = Nothing) As MASToggleSwitch
            Return ConfigureControl(MASToggleSwitch.Create(text, checked), configure)
        End Function

        Public Function AddToggleSwitch(Optional text As String = Nothing,
                                        Optional checked As Boolean = False,
                                        Optional configure As Action(Of MASToggleSwitch) = Nothing) As MASToggleSwitch
            Return AddCreatedControlInternal(CreateToggleSwitch(text, checked, configure))
        End Function

        Friend Function CreateRating(Optional value As Double = 0.0R,
                                    Optional maximum As Integer = 5,
                                    Optional configure As Action(Of MASRating) = Nothing) As MASRating
            Return ConfigureControl(MASRating.Create(value, maximum), configure)
        End Function

        Public Function AddRating(Optional value As Double = 0.0R,
                                  Optional maximum As Integer = 5,
                                  Optional configure As Action(Of MASRating) = Nothing) As MASRating
            Return AddCreatedControlInternal(CreateRating(value, maximum, configure))
        End Function

        Friend Function CreateSegmentedControl(Optional segments As IEnumerable(Of MASSegmentEntry) = Nothing,
                                               Optional configure As Action(Of MASSegmentedControl) = Nothing) As MASSegmentedControl
            Dim control As MASSegmentedControl = MASSegmentedControl.Create()
            If segments IsNot Nothing Then control.WithSegments(segments)
            Return ConfigureControl(control, configure)
        End Function

        Public Function AddSegmentedControl(Optional segments As IEnumerable(Of MASSegmentEntry) = Nothing,
                                            Optional configure As Action(Of MASSegmentedControl) = Nothing) As MASSegmentedControl
            Return AddCreatedControlInternal(CreateSegmentedControl(segments, configure))
        End Function

        Friend Function CreateSelectorItemList(Optional items As IEnumerable(Of MASSelectorItemEntry) = Nothing,
                                               Optional configure As Action(Of MASSelectorItemControl) = Nothing) As MASSelectorItemControl
            Dim control As MASSelectorItemControl = MASSelectorItemControl.Create()
            If items IsNot Nothing Then control.WithItems(items)
            Return ConfigureControl(control, configure)
        End Function

        Public Function AddSelectorItemList(Optional items As IEnumerable(Of MASSelectorItemEntry) = Nothing,
                                            Optional configure As Action(Of MASSelectorItemControl) = Nothing) As MASSelectorItemControl
            Return AddCreatedControlInternal(CreateSelectorItemList(items, configure))
        End Function
    End Class

End Namespace
