Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Generic
Imports Nexamas.UI.Controls
Imports Nexamas.UI.Layout

Namespace Nexamas.UI.Composition

    ' <summary>
    ' Empty-state page recipe family for the MASPage public facade.
    ' </summary>
    Partial Friend NotInheritable Class MASPage

        ''' <summary>
        ''' Creates a neutral empty-state page template.
        ''' EmptyStatePage is layout-only: it places existing controls and optional actions, but does not render,
        ''' navigate, own overlay/input/scroll runtime, Theme state, or Host lifecycle.
        ''' </summary>
        Public Shared Function EmptyStatePage(title As MASControlBase,
                                              Optional message As MASControlBase = Nothing,
                                              Optional actions As IMASLayoutNode = Nothing,
                                              Optional illustration As MASControlBase = Nothing,
                                              Optional spacing As Single = MASCompositionPageSizeTokens.EmptyStateSpacing,
                                              Optional padding As MASLayoutThickness = Nothing,
                                              Optional maxContentWidth As Single = MASCompositionPageSizeTokens.EmptyStateMaxContentWidth,
                                              Optional centerVertically As Boolean = True,
                                              Optional useDefaultVisualPolish As Boolean = True) As IMASLayoutNode

            Dim contentItems As New List(Of MASLayoutItem)()

            If illustration IsNot Nothing Then
                contentItems.Add(
                    MASComposition.Item(
                        control:=illustration,
                        width:=MASSizePolicy.Auto(),
                        height:=MASSizePolicy.Auto(),
                        alignment:=MASLayoutAlignment.Center,
                        margin:=ResolveEmptyIllustrationMargin(useDefaultVisualPolish))
                )
            End If

            If title IsNot Nothing Then
                contentItems.Add(
                    MASComposition.Item(
                        control:=title,
                        width:=MASSizePolicy.Fill(1.0F),
                        height:=MASSizePolicy.Auto(),
                        alignment:=MASLayoutAlignment.Center,
                        margin:=ResolveEmptyTitleMargin(useDefaultVisualPolish))
                )
            End If

            If message IsNot Nothing Then
                contentItems.Add(
                    MASComposition.Item(
                        control:=message,
                        width:=MASSizePolicy.Fill(1.0F),
                        height:=MASSizePolicy.Auto(),
                        alignment:=MASLayoutAlignment.Center,
                        margin:=ResolveEmptyMessageMargin(useDefaultVisualPolish))
                )
            End If

            If actions IsNot Nothing Then
                contentItems.Add(
                    MASComposition.NodeItem(
                        node:=actions,
                        width:=MASSizePolicy.Auto(),
                        height:=MASSizePolicy.Auto(),
                        alignment:=MASLayoutAlignment.Center,
                        margin:=ResolveEmptyActionsMargin(useDefaultVisualPolish))
                )
            End If

            Dim contentNode As IMASLayoutNode =
                MASComposition.Vertical(
                    children:=contentItems.ToArray(),
                    spacing:=SafeSpacing(spacing),
                    padding:=ResolveEmptyStatePadding(padding, useDefaultVisualPolish),
                    alignment:=MASLayoutAlignment.Center)

            Dim centeredContent As IMASLayoutNode = WrapMaxContentWidth(contentNode, maxContentWidth)

            If Not centerVertically Then
                Return centeredContent
            End If

            Return MASComposition.Vertical(
                children:=New MASLayoutItem() {
                    MASComposition.NodeItem(node:=New MASSpacerLayoutNode(), height:=MASSizePolicy.Fill(1.0F)),
                    MASComposition.NodeItem(node:=centeredContent, height:=MASSizePolicy.Auto(), alignment:=MASLayoutAlignment.Stretch),
                    MASComposition.NodeItem(node:=New MASSpacerLayoutNode(), height:=MASSizePolicy.Fill(1.0F))
                },
                spacing:=0.0F,
                padding:=MASLayoutThickness.None(),
                alignment:=MASLayoutAlignment.Stretch)
        End Function

        ''' <summary>
        ''' Creates a neutral empty-state page template from text.
        ''' Generated labels are normal MASLabel controls, so rendering remains inside Core controls.
        ''' </summary>
        Public Shared Function EmptyStatePage(titleText As String,
                                              Optional messageText As String = "",
                                              Optional actions As IMASLayoutNode = Nothing,
                                              Optional illustration As MASControlBase = Nothing,
                                              Optional spacing As Single = MASCompositionPageSizeTokens.EmptyStateSpacing,
                                              Optional padding As MASLayoutThickness = Nothing,
                                              Optional maxContentWidth As Single = MASCompositionPageSizeTokens.EmptyStateMaxContentWidth,
                                              Optional centerVertically As Boolean = True,
                                              Optional useDefaultVisualPolish As Boolean = True) As IMASLayoutNode

            Dim titleControl As MASLabel = MASPageLabelRecipeFactory.CreateEmptyStateTitle(titleText)
            Dim messageControl As MASLabel = Nothing

            If Not String.IsNullOrWhiteSpace(messageText) Then
                messageControl = MASPageLabelRecipeFactory.CreateEmptyStateMessage(messageText)
            End If

            Return EmptyStatePage(
                title:=titleControl,
                message:=messageControl,
                actions:=actions,
                illustration:=illustration,
                spacing:=spacing,
                padding:=padding,
                maxContentWidth:=maxContentWidth,
                centerVertically:=centerVertically,
                useDefaultVisualPolish:=useDefaultVisualPolish)
        End Function

    End Class

End Namespace
