Option Strict On
Option Explicit On

Imports System
Imports Nexamas.UI.Components
Imports Nexamas.UI.Scroll.Theming
Imports Nexamas.UI.TopBar.Theming

Namespace Nexamas.UI.Theming

    <Global.System.ComponentModel.EditorBrowsable(Global.System.ComponentModel.EditorBrowsableState.Advanced)>
    Friend NotInheritable Class FamiliesTheme
        Implements IMASThemeFamilies

        Private ReadOnly _selectorItem As IMASSelectorItemTheme
        Private ReadOnly _segmentedControl As IMASSegmentedControlTheme
        Private ReadOnly _list As IMASListTheme
        Private ReadOnly _input As IMASInputTheme
        Private ReadOnly _tile As IMASTileTheme
        Private ReadOnly _buttons As IMASButtonTheme
        Private ReadOnly _cards As IMASCardsTheme
        Private ReadOnly _media As IMASMediaTheme
        Private ReadOnly _menu As IMASMenuTheme
        Private ReadOnly _scroll As IMASScrollTheme
        Private ReadOnly _topBar As IMASTopBarTheme
        Private ReadOnly _progress As IMASProgressTheme
        Private ReadOnly _toast As IMASToastTheme
        Private ReadOnly _tooltip As IMASTooltipTheme
        Private ReadOnly _checkBox As IMASCheckBoxTheme
        Private ReadOnly _radioButton As IMASRadioButtonTheme
        Private ReadOnly _toggleSwitch As IMASToggleSwitchTheme
        Private ReadOnly _colorPicker As IMASColorPickerTheme
        Private ReadOnly _tabs As IMASTabTheme
        Private ReadOnly _panelShell As IMASPanelShellTheme
        Private ReadOnly _frameSurface As IMASFrameSurfaceTheme
        Private ReadOnly _surfaceChrome As IMASSurfaceChromeTheme
        Private ReadOnly _groupBox As IMASGroupBoxTheme

        Friend Sub New(selectorItem As IMASSelectorItemTheme,
                       segmentedControl As IMASSegmentedControlTheme,
                       list As IMASListTheme,
                       input As IMASInputTheme,
                       tile As IMASTileTheme,
                       buttons As IMASButtonTheme,
                       cards As IMASCardsTheme,
                       media As IMASMediaTheme,
                       menu As IMASMenuTheme,
                       scroll As IMASScrollTheme,
                       topBar As IMASTopBarTheme,
                                progress As IMASProgressTheme,
                       toast As IMASToastTheme,
                       tooltip As IMASTooltipTheme,
                       checkBox As IMASCheckBoxTheme,
                       radioButton As IMASRadioButtonTheme,
                       toggleSwitch As IMASToggleSwitchTheme,
                       colorPicker As IMASColorPickerTheme,
                       tabs As IMASTabTheme,
                                           panelShell As IMASPanelShellTheme,
                       frameSurface As IMASFrameSurfaceTheme,
                       surfaceChrome As IMASSurfaceChromeTheme,
                       groupBox As IMASGroupBoxTheme)

            If selectorItem Is Nothing Then Throw New ArgumentNullException(NameOf(selectorItem))
            If segmentedControl Is Nothing Then Throw New ArgumentNullException(NameOf(segmentedControl))
            If list Is Nothing Then Throw New ArgumentNullException(NameOf(list))
            If input Is Nothing Then Throw New ArgumentNullException(NameOf(input))
            If tile Is Nothing Then Throw New ArgumentNullException(NameOf(tile))
            If buttons Is Nothing Then Throw New ArgumentNullException(NameOf(buttons))
            If cards Is Nothing Then Throw New ArgumentNullException(NameOf(cards))
            If media Is Nothing Then Throw New ArgumentNullException(NameOf(media))
            If menu Is Nothing Then Throw New ArgumentNullException(NameOf(menu))

            If scroll Is Nothing Then Throw New ArgumentNullException(NameOf(scroll))
            If topBar Is Nothing Then Throw New ArgumentNullException(NameOf(topBar))

            If progress Is Nothing Then Throw New ArgumentNullException(NameOf(progress))
            If toast Is Nothing Then Throw New ArgumentNullException(NameOf(toast))
            If tooltip Is Nothing Then Throw New ArgumentNullException(NameOf(tooltip))
            If checkBox Is Nothing Then Throw New ArgumentNullException(NameOf(checkBox))
            If radioButton Is Nothing Then Throw New ArgumentNullException(NameOf(radioButton))
            If toggleSwitch Is Nothing Then Throw New ArgumentNullException(NameOf(toggleSwitch))
            If colorPicker Is Nothing Then Throw New ArgumentNullException(NameOf(colorPicker))
            If tabs Is Nothing Then Throw New ArgumentNullException(NameOf(tabs))
            If panelShell Is Nothing Then Throw New ArgumentNullException(NameOf(panelShell))
            If frameSurface Is Nothing Then Throw New ArgumentNullException(NameOf(frameSurface))
            If surfaceChrome Is Nothing Then Throw New ArgumentNullException(NameOf(surfaceChrome))
            If groupBox Is Nothing Then Throw New ArgumentNullException(NameOf(groupBox))

            _selectorItem = selectorItem
            _segmentedControl = segmentedControl
            _list = list
            _input = input
            _tile = tile
            _buttons = buttons
            _cards = cards
            _media = media
            _menu = menu
            _scroll = scroll
            _topBar = topBar
            _progress = progress
            _toast = toast
            _tooltip = tooltip
            _checkBox = checkBox
            _radioButton = radioButton
            _toggleSwitch = toggleSwitch
            _colorPicker = colorPicker
            _tabs = tabs
            _panelShell = panelShell
            _frameSurface = frameSurface
            _surfaceChrome = surfaceChrome
            _groupBox = groupBox
        End Sub

        Public ReadOnly Property SelectorItem As IMASSelectorItemTheme Implements IMASThemeFamilies.SelectorItem
            Get
                Return _selectorItem
            End Get
        End Property

        Public ReadOnly Property SegmentedControl As IMASSegmentedControlTheme Implements IMASThemeFamilies.SegmentedControl
            Get
                Return _segmentedControl
            End Get
        End Property

        Public ReadOnly Property List As IMASListTheme Implements IMASThemeFamilies.List
            Get
                Return _list
            End Get
        End Property

        Public ReadOnly Property Input As IMASInputTheme Implements IMASThemeFamilies.Input
            Get
                Return _input
            End Get
        End Property

        Public ReadOnly Property Tile As IMASTileTheme Implements IMASThemeFamilies.Tile
            Get
                Return _tile
            End Get
        End Property

        Public ReadOnly Property Buttons As IMASButtonTheme Implements IMASThemeFamilies.Buttons
            Get
                Return _buttons
            End Get
        End Property

        Public ReadOnly Property Cards As IMASCardsTheme Implements IMASThemeFamilies.Cards
            Get
                Return _cards
            End Get
        End Property

        Public ReadOnly Property Media As IMASMediaTheme Implements IMASThemeFamilies.Media
            Get
                Return _media
            End Get
        End Property

        Public ReadOnly Property Menu As IMASMenuTheme Implements IMASThemeFamilies.Menu
            Get
                Return _menu
            End Get
        End Property


        Public ReadOnly Property Scroll As IMASScrollTheme Implements IMASThemeFamilies.Scroll
            Get
                Return _scroll
            End Get
        End Property

        Public ReadOnly Property TopBar As IMASTopBarTheme Implements IMASThemeFamilies.TopBar
            Get
                Return _topBar
            End Get
        End Property

        Public ReadOnly Property Progress As IMASProgressTheme Implements IMASThemeFamilies.Progress
            Get
                Return _progress
            End Get
        End Property

        Public ReadOnly Property Toast As IMASToastTheme Implements IMASThemeFamilies.Toast
            Get
                Return _toast
            End Get
        End Property

        Public ReadOnly Property Tooltip As IMASTooltipTheme Implements IMASThemeFamilies.Tooltip
            Get
                Return _tooltip
            End Get
        End Property

        Public ReadOnly Property CheckBox As IMASCheckBoxTheme Implements IMASThemeFamilies.CheckBox
            Get
                Return _checkBox
            End Get
        End Property

        Public ReadOnly Property RadioButton As IMASRadioButtonTheme Implements IMASThemeFamilies.RadioButton
            Get
                Return _radioButton
            End Get
        End Property

        Public ReadOnly Property ToggleSwitch As IMASToggleSwitchTheme Implements IMASThemeFamilies.ToggleSwitch
            Get
                Return _toggleSwitch
            End Get
        End Property

        Public ReadOnly Property ColorPicker As IMASColorPickerTheme Implements IMASThemeFamilies.ColorPicker
            Get
                Return _colorPicker
            End Get
        End Property
        Public ReadOnly Property Tabs As IMASTabTheme Implements IMASThemeFamilies.Tabs
            Get
                Return _tabs
            End Get
        End Property


        Public ReadOnly Property PanelShell As IMASPanelShellTheme Implements IMASThemeFamilies.PanelShell
            Get
                Return _panelShell
            End Get
        End Property

        Public ReadOnly Property FrameSurface As IMASFrameSurfaceTheme Implements IMASThemeFamilies.FrameSurface
            Get
                Return _frameSurface
            End Get
        End Property

        Public ReadOnly Property SurfaceChrome As IMASSurfaceChromeTheme Implements IMASThemeFamilies.SurfaceChrome
            Get
                Return _surfaceChrome
            End Get
        End Property

        Public ReadOnly Property GroupBox As IMASGroupBoxTheme Implements IMASThemeFamilies.GroupBox
            Get
                Return _groupBox
            End Get
        End Property

    End Class

End Namespace