Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Generic
Imports Nexamas.UI.Controls
Imports Nexamas.UI.Host
Imports Nexamas.UI.Layout
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Components
Imports SkiaSharp

Namespace Nexamas.UI.Application

    Partial Public NotInheritable Class MASApplicationSurfaceLayoutBuilder
        Public Function CommandBar(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            _commandBarPage = CreateRegionPage(buildAction)
            Return Me
        End Function

        Public Function Sidebar(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            _sidebarPage = CreateRegionPage(buildAction)
            Return Me
        End Function

        Public Function Sidebar(size As MASApplicationSurfaceSideSize,
                                buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            _sidebarSize = NormalizeSidebarSize(size)
            _sidebarPage = CreateRegionPage(buildAction)
            Return Me
        End Function

        ''' <summary>
        ''' Adds the official navigation/left-side region. This is semantic page composition,
        ''' not manual coordinate layout; the final width is resolved from MASSize/MASLayout tokens.
        ''' </summary>

        Public Function Navigation(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            Return Sidebar(buildAction)
        End Function

        Public Function Navigation(size As MASApplicationSurfaceSideSize,
                                   buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            Return Sidebar(size, buildAction)
        End Function

        Public Function LeftSide(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            Return Sidebar(buildAction)
        End Function

        Public Function LeftSide(size As MASApplicationSurfaceSideSize,
                                 buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            Return Sidebar(size, buildAction)
        End Function

        Public Function SidebarFooter(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            _sidebarFooterPage = CreateRegionPage(buildAction)
            Return Me
        End Function

        Public Function Content(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            _contentPage = CreateRegionPage(buildAction)
            Return Me
        End Function

        ''' <summary>
        ''' Adds the true application workspace/main-content region. This is the region where
        ''' document, canvas, icon-library, editor, or data work actually happens; it is not the full form.
        ''' </summary>

        Public Function Workspace(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            Return Content(buildAction)
        End Function

        Public Function MainContent(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            Return Content(buildAction)
        End Function

        Public Function Inspector(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            _inspectorPage = CreateRegionPage(buildAction)
            Return Me
        End Function

        Public Function Inspector(size As MASApplicationSurfaceSideSize,
                                  buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            _inspectorSize = NormalizeSidebarSize(size)
            _inspectorPage = CreateRegionPage(buildAction)
            Return Me
        End Function

        Public Function RightSide(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            Return Inspector(buildAction)
        End Function

        Public Function RightSide(size As MASApplicationSurfaceSideSize,
                                  buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            Return Inspector(size, buildAction)
        End Function

        Public Function Footer(buildAction As Action(Of MASApplicationLayoutPageBuilder)) As MASApplicationSurfaceLayoutBuilder
            _footerPage = CreateRegionPage(buildAction)
            Return Me
        End Function
    End Class

End Namespace
