Option Strict On
Option Explicit On

Imports System
Imports Nexamas.UI.FloatRuntime
Imports Nexamas.UI.Values

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Friend-owned float policy for MASDrawer. It owns drawer title, side, width,
    ''' owner-key and docked FloatRuntime presentation decisions while keeping visual content
    ''' in MASSidePanel and avoiding popup/flyout/overlay services or native forms.
    ''' </summary>
    Friend NotInheritable Class MASDrawerFloatPolicy
        Private Sub New()
        End Sub

        Friend Shared Function NormalizeTitle(value As String) As String
            Dim text As String = If(value, String.Empty).Trim()
            If text.Length > 96 Then text = text.Substring(0, 96)
            Return text
        End Function

        Friend Shared Function NormalizeSide(value As MASDrawerSide) As MASDrawerSide
            Select Case value
                Case MASDrawerSide.Left, MASDrawerSide.Right
                    Return value
                Case Else
                    Return MASDrawerSide.Right
            End Select
        End Function

        Friend Shared Function NormalizeWidth(value As Single) As Single
            If Single.IsNaN(value) OrElse Single.IsInfinity(value) Then Return DrawerTokens.DefaultWidthDip
            If value < DrawerTokens.MinWidthDip Then Return DrawerTokens.MinWidthDip
            If value > DrawerTokens.MaxWidthDip Then Return DrawerTokens.MaxWidthDip
            Return value
        End Function

        Friend Shared Function NormalizeOwnerKey(value As String) As String
            Dim key As String = If(value, String.Empty).Trim()
            If key.Length = 0 Then Return DrawerTokens.DefaultOwnerKey
            If key.Length > 80 Then key = key.Substring(0, 80)
            Return key
        End Function

        Friend Shared Function ResolveFloatPlacement(side As MASDrawerSide) As MASFloatPlacement
            If NormalizeSide(side) = MASDrawerSide.Left Then Return MASFloatPlacement.DockLeft
            Return MASFloatPlacement.DockRight
        End Function

        Friend Shared ReadOnly Property HasFloatRuntimeRoute As Boolean
            Get
                Return True
            End Get
        End Property

        Friend Shared ReadOnly Property HasSideWidthPolicy As Boolean
            Get
                Return True
            End Get
        End Property

        Friend Shared ReadOnly Property HasDismissPolicy As Boolean
            Get
                Return True
            End Get
        End Property

        Friend Shared ReadOnly Property HasNoParallelOverlayRoute As Boolean
            Get
                Return True
            End Get
        End Property

        Friend Shared ReadOnly Property HasNoNativeFormWrapper As Boolean
            Get
                Return True
            End Get
        End Property
    End Class

End Namespace
