Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Generic
Imports Nexamas.UI.General
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Values
Imports Nexamas.UI.Architecture
Imports Nexamas.UI.Layout
Imports Nexamas.UI.Composition
Imports SkiaSharp

Namespace Nexamas.UI.Controls


    Partial Public NotInheritable Class MASGroupBox
        Protected Overrides Sub Render(canvas As SKCanvas, ctx As MASThemeContext, pixelBounds As SKRect)
            If canvas Is Nothing OrElse ctx Is Nothing Then Return
            If pixelBounds.Width <= 2.0F OrElse pixelBounds.Height <= 2.0F Then Return

            _renderer.Render(
    canvas:=canvas,
    ctx:=ctx,
    contract:=_contract,
    boundsPx:=pixelBounds,
    spec:=New MASGroupBoxRenderer.RenderSpec With {
        .Title = MASGroupBoxSurfacePolicy.ResolveRenderTitle(_title),
        .SurfaceSource = ToRendererSurfaceSource(_surfaceSource),
        .BorderRecipe = ToRendererBorderRecipe(_borderRecipe),
        .BorderStrength = ToRendererBorderStrength(_borderStrength),
        .SurfaceMaterialKey = _surfaceMaterialKey,
        .DrawShadow = _drawShadow,
        .DrawSeparator = _drawSeparator,
        .DrawPremiumBorder = _drawPremiumBorder,
        .Enabled = Enabled,
        .TitleNotchEnabled = _titleNotchEnabled,
        .TitlePlateStrength = ToRendererTitlePlateStrength(_titlePlateStrength),
        .TitleLift = _titleLift
    })
        End Sub



        Private Function ResolveHeaderHeightLogical() As Single
            Return MASGroupBoxSurfacePolicy.ResolveHeaderHeight(_title, _reserveHeaderWhenEmpty)
        End Function




        Private Shared Function ToRendererSurfaceSource(value As MASGroupBoxSurfaceSource) As MASGroupBoxRenderer.GroupBoxRenderSurfaceSource
            Select Case value
                Case MASGroupBoxSurfaceSource.Plain
                    Return MASGroupBoxRenderer.GroupBoxRenderSurfaceSource.Plain
                Case MASGroupBoxSurfaceSource.TransparentFrame
                    Return MASGroupBoxRenderer.GroupBoxRenderSurfaceSource.TransparentFrame
                Case Else
                    Return MASGroupBoxRenderer.GroupBoxRenderSurfaceSource.Acrylic
            End Select
        End Function




        Private Shared Function ToRendererBorderRecipe(value As MASGroupBoxBorderRecipe) As MASGroupBoxRenderer.GroupBoxRenderBorderRecipe
            Select Case value
                Case MASGroupBoxBorderRecipe.AcrylicSurface
                    Return MASGroupBoxRenderer.GroupBoxRenderBorderRecipe.AcrylicSurface
                Case Else
                    Return MASGroupBoxRenderer.GroupBoxRenderBorderRecipe.ListSurface
            End Select
        End Function




        Private Shared Function ToRendererBorderStrength(value As MASGroupBoxBorderStrength) As MASSurfaceFrameStrength
            Select Case value
                Case MASGroupBoxBorderStrength.Level1
                    Return MASSurfaceFrameStrength.Level1
                Case MASGroupBoxBorderStrength.Level2
                    Return MASSurfaceFrameStrength.Level2
                Case MASGroupBoxBorderStrength.Level3
                    Return MASSurfaceFrameStrength.Level3
                Case MASGroupBoxBorderStrength.Level4
                    Return MASSurfaceFrameStrength.Level4
                Case MASGroupBoxBorderStrength.Level5
                    Return MASSurfaceFrameStrength.Level5
                Case Else
                    Return MASSurfaceFrameStrength.Level6
            End Select
        End Function

    End Class

End Namespace
