Option Strict On
Option Explicit On

Imports SkiaSharp

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Semantic surface facade for calm flat premium shells.
    ''' Orchestrates ShadowSystem ambient elevation and the woven-slate texture/body painter.
    ''' Suitable for command bars, flat panels, quiet containers, and similar surfaces.
    ''' </summary>
    Friend NotInheritable Class MASWovenSlateSurface

        Private Shared ReadOnly _shadowPainter As New Nexamas.UI.Rendering.MASShadowPainter()

        Private Sub New()
        End Sub

        Friend Shared Sub Draw(canvas As SKCanvas,
                               rectPx As SKRect,
                               dpi As Single,
                               Optional cornerRadiusDip As Single = 11.0F)

            If canvas Is Nothing Then Return
            If rectPx.IsEmpty OrElse rectPx.Width <= 0.0F OrElse rectPx.Height <= 0.0F Then Return

            dpi = Nexamas.UI.General.PixelSnap.SafeDpi(dpi)
            rectPx = Nexamas.UI.General.PixelSnap.SnapRectHalf(rectPx)

            Dim radiusPx As Single = Math.Max(4.0F, cornerRadiusDip * dpi)
            Dim shadowRect As New SKRect(
                rectPx.Left,
                rectPx.Top + (0.8F * dpi),
                rectPx.Right,
                rectPx.Bottom + (2.2F * dpi))

            _shadowPainter.DrawShadow(
                canvas:=canvas,
                r:=shadowRect,
                radiusPx:=radiusPx,
                dpi:=dpi,
                shadowBase:=New SKColor(10, 18, 30),
                spec:=Nexamas.UI.Rendering.MASAmbientSurfaceShadowProfiles.ResolveWovenSlate())

            Using painter As New Nexamas.UI.Rendering.MASWovenSlateTexturePainter()
                painter.Draw(
                    canvas:=canvas,
                    rectPx:=rectPx,
                    dpi:=dpi,
                    cornerRadiusDip:=cornerRadiusDip)
            End Using
        End Sub

    End Class

End Namespace
