Option Strict On
Option Explicit On

Namespace Nexamas.UI.Rendering

    ''' <summary>
    ''' A named reusable composition of material, frame, chrome, and role.
    ''' It answers the consumer-level question: "which complete platform surface look should I use?"
    ''' </summary>
    Friend NotInheritable Class MASSurfaceVisualStyle

        Friend ReadOnly Property Id As String
        Friend ReadOnly Property SurfaceMaterialKey As String
        Friend ReadOnly Property SurfaceFrameKey As String
        Friend ReadOnly Property SurfaceChromeKey As String
        Friend ReadOnly Property SurfaceRole As MASSurfaceRole
        Friend ReadOnly Property Features As MASSurfaceVisualStyleFeatures

        Friend Sub New(id As String,
                       surfaceMaterialKey As String,
                       surfaceFrameKey As String,
                       surfaceChromeKey As String,
                       surfaceRole As MASSurfaceRole,
                       features As MASSurfaceVisualStyleFeatures)

            Me.Id = Normalize(id, MASSurfaceVisualStyleIds.PlatformDialogFrame)
            Me.SurfaceMaterialKey = Normalize(surfaceMaterialKey, MASSurfaceMaterialIds.PlatformDefault)
            Me.SurfaceFrameKey = Normalize(surfaceFrameKey, MASSurfaceFrameIds.PlatformDefault)
            Me.SurfaceChromeKey = Normalize(surfaceChromeKey, MASSurfaceChromeIds.PlatformDefault)
            Me.SurfaceRole = If(surfaceRole = MASSurfaceRole.Unknown, MASSurfaceRole.PanelShell, surfaceRole)
            Me.Features = If(features, MASSurfaceVisualStyleFeatures.PlatformDialogFrame)
        End Sub

        Private Shared Function Normalize(value As String, fallback As String) As String
            Dim result As String = If(value, String.Empty).Trim()
            If result.Length = 0 Then Return fallback
            Return result
        End Function

    End Class

End Namespace
