' =========================
' SurfaceFamilyRadiusProfiles.vb
' =========================

Option Strict On
Option Explicit On

Namespace Nexamas.UI.Values

    Friend NotInheritable Class SurfaceFamilyRadiusProfiles

        Private Sub New()
        End Sub

        Friend Shared Function RadiusDip(scale As RadiusScale) As Single
            Select Case scale
                Case RadiusScale.Ss
                    Return CornerRadiusTokens.Ss

                Case RadiusScale.Sm
                    Return CornerRadiusTokens.Sm

                Case RadiusScale.Sl
                    Return CornerRadiusTokens.Sl

                Case RadiusScale.Mm
                    Return CornerRadiusTokens.Mm

                Case RadiusScale.Ml
                    Return CornerRadiusTokens.Ml

                Case RadiusScale.Ll
                    Return CornerRadiusTokens.Ll

                Case Else
                    Return CornerRadiusTokens.Lx
            End Select
        End Function

        Friend Shared Function RadiusScaleForFamily(fam As CommonEnums.SurfaceFamily,
                                                    layer As RadiusLayer) As RadiusScale
            Dim p As RadiusProfile = RadiusProfileForFamily(fam)

            Select Case layer
                Case RadiusLayer.Interaction
                    Return p.Interaction

                Case RadiusLayer.Shadow
                    Return p.Shadow

                Case Else
                    Return p.Surface
            End Select
        End Function

        Friend Shared Function RadiusProfileForKind(kind As CommonEnums.ControlKind) As RadiusProfile
            Return RadiusProfileForFamily(CommonEnums.MapKindToFamily(kind))
        End Function

        Friend Shared Function RadiusProfileForFamily(fam As CommonEnums.SurfaceFamily) As RadiusProfile

            Dim p As New RadiusProfile With {
                .Surface = RadiusScale.Ml,
                .Interaction = RadiusScale.Ml,
                .Shadow = RadiusScale.Ml,
                .IsCapsule = False
            }

            Select Case fam

                Case CommonEnums.SurfaceFamily.Input,
                     CommonEnums.SurfaceFamily.ComboBox

                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Mm

                Case CommonEnums.SurfaceFamily.Card
                    p.Surface = RadiusScale.Ml
                    p.Interaction = RadiusScale.Ml
                    p.Shadow = RadiusScale.Ll

                Case CommonEnums.SurfaceFamily.Media
                    ' Media shells follow the same reusable-container corner discipline as
                    ' PanelShell-hosted FilePicker/FileExplorer surfaces: the outer shell owns
                    ' the visible radius, while toolbar/footer/viewport paint only inside it.
                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Mm

                Case CommonEnums.SurfaceFamily.TopBar
                    p.Surface = RadiusScale.Ml
                    p.Interaction = RadiusScale.Ml
                    p.Shadow = RadiusScale.Ml

                Case CommonEnums.SurfaceFamily.DataGrid
                    ' DataGrid owns a dedicated family so its outer surface radius can be tuned independently
                    ' from ListView/TreeView/ListSurface while still consuming the same MAS radius resolver path.
                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Mm

                Case CommonEnums.SurfaceFamily.Chart
                    ' Chart keeps the existing neutral card-like default radius profile while becoming an explicit
                    ' architecture surface family for runtime validation.
                    p.Surface = RadiusScale.Ml
                    p.Interaction = RadiusScale.Ml
                    p.Shadow = RadiusScale.Ml

                Case CommonEnums.SurfaceFamily.PropertyGrid
                    ' PropertyGrid keeps the existing neutral editor-surface radius profile while becoming an explicit
                    ' architecture surface family for runtime validation.
                    p.Surface = RadiusScale.Ml
                    p.Interaction = RadiusScale.Ml
                    p.Shadow = RadiusScale.Ml

                Case CommonEnums.SurfaceFamily.SelectorItem,
                     CommonEnums.SurfaceFamily.ListSurface,
                     CommonEnums.SurfaceFamily.Row,
                     CommonEnums.SurfaceFamily.Fenster,
                     CommonEnums.SurfaceFamily.DropDown,
                     CommonEnums.SurfaceFamily.DropDownMenu,
                     CommonEnums.SurfaceFamily.ContextMenu,
                     CommonEnums.SurfaceFamily.Menu,
                     CommonEnums.SurfaceFamily.ListBox,
                     CommonEnums.SurfaceFamily.Chip,
                     CommonEnums.SurfaceFamily.ButtonMas,
                     CommonEnums.SurfaceFamily.SegmentedControl,
                     CommonEnums.SurfaceFamily.Tile,
                     CommonEnums.SurfaceFamily.TileBox,
                     CommonEnums.SurfaceFamily.ScrollBar,
                     CommonEnums.SurfaceFamily.TabStrip,
                     CommonEnums.SurfaceFamily.TabItem,
                     CommonEnums.SurfaceFamily.ProgressBar,
                     CommonEnums.SurfaceFamily.Tooltip

                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Mm

                Case CommonEnums.SurfaceFamily.ButtonTal
                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Sm

                Case CommonEnums.SurfaceFamily.CheckBox
                    p.Surface = RadiusScale.Sl
                    p.Interaction = RadiusScale.Sl
                    p.Shadow = RadiusScale.Sl

                Case CommonEnums.SurfaceFamily.RadioButton,
                     CommonEnums.SurfaceFamily.ToggleSwitch

                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Mm
                    p.IsCapsule = True

                Case CommonEnums.SurfaceFamily.Toast
                    p.Surface = RadiusScale.Ml
                    p.Interaction = RadiusScale.Ml
                    p.Shadow = RadiusScale.Ll

                Case CommonEnums.SurfaceFamily.GroupBox,
                     CommonEnums.SurfaceFamily.ColorPicker,
                     CommonEnums.SurfaceFamily.ColorPickerPreview,
                     CommonEnums.SurfaceFamily.ColorPickerSVBox,
                     CommonEnums.SurfaceFamily.ColorPickerHueBar,
                     CommonEnums.SurfaceFamily.ColorPickerSlot

                    p.Surface = RadiusScale.Ml
                    p.Interaction = RadiusScale.Ml
                    p.Shadow = RadiusScale.Ml

                Case CommonEnums.SurfaceFamily.GroupBoxTitlePlate,
                     CommonEnums.SurfaceFamily.ColorPickerSwatch

                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Mm

                Case CommonEnums.SurfaceFamily.ColorPickerMarker
                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Mm
                    p.IsCapsule = True
                Case CommonEnums.SurfaceFamily.PanelShell
                    ' Shared outer chrome radius for MASPanelShell-hosted surfaces
                    ' such as MessageBox, FilePicker, FileExplorer, ReadyForm, and
                    ' application PanelShell chrome. Feature content must keep its
                    ' own internal component contracts; only the shell frame belongs here.
                    p.Surface = RadiusScale.Mm
                    p.Interaction = RadiusScale.Mm
                    p.Shadow = RadiusScale.Mm

            End Select

            Return p
        End Function

    End Class

End Namespace