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

        Public Function AddImageViewer(Optional title As String = Nothing,
                                       Optional subtitle As String = Nothing,
                                       Optional configure As Action(Of MASImageViewer) = Nothing) As MASImageViewer
            Return AddCreatedControlInternal(CreateImageViewer(title, subtitle, configure))
        End Function

        Friend Function CreateFileDropZone(Optional title As String = Nothing,
                                           Optional description As String = Nothing,
                                           Optional configure As Action(Of MASFileDropZone) = Nothing) As MASFileDropZone
            Return ConfigureControl(MASFileDropZone.Create(title, description), configure)
        End Function

        Public Function AddFileDropZone(Optional title As String = Nothing,
                                        Optional description As String = Nothing,
                                        Optional configure As Action(Of MASFileDropZone) = Nothing) As MASFileDropZone
            Return AddCreatedControlInternal(CreateFileDropZone(title, description, configure))
        End Function

        Friend Function CreateCalendarView(Optional selectedDate As Nullable(Of Date) = Nothing,
                                           Optional displayMonth As Nullable(Of Date) = Nothing,
                                           Optional configure As Action(Of MASCalendarView) = Nothing) As MASCalendarView
            Return ConfigureControl(MASCalendarView.Create(selectedDate, displayMonth), configure)
        End Function

        Public Function AddCalendarView(Optional selectedDate As Nullable(Of Date) = Nothing,
                                        Optional displayMonth As Nullable(Of Date) = Nothing,
                                        Optional configure As Action(Of MASCalendarView) = Nothing) As MASCalendarView
            Return AddCreatedControlInternal(CreateCalendarView(selectedDate, displayMonth, configure))
        End Function

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

        Public Function AddFilePickerControl(Optional configure As Action(Of MASFilePickerControl) = Nothing) As MASFilePickerControl
            Return AddCreatedControlInternal(CreateFilePickerControl(configure))
        End Function

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

        Public Function AddFileExplorerView(Optional configure As Action(Of MASFileExplorerView) = Nothing) As MASFileExplorerView
            Return AddCreatedControlInternal(CreateFileExplorerView(configure))
        End Function
    End Class

End Namespace
