Option Strict On
Option Explicit On

Imports System

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Friend-only text policy for the single-line MASTextBox gateway. The shared
    ''' MASInputBoxSkiaBase still owns editing, IME, selection, validation visuals,
    ''' clipboard and rendering; this policy owns only TextBox-specific assignment
    ''' normalization and fluent input hygiene.
    ''' </summary>
    Friend NotInheritable Class MASTextBoxTextPolicy

        Private Sub New()
        End Sub

        Friend Shared Function NormalizeSingleLineText(value As String) As String
            Dim s As String = If(value, String.Empty)
            s = s.Replace(vbCrLf, " ")
            s = s.Replace(vbCr, " ")
            s = s.Replace(vbLf, " ")
            s = s.Replace(vbTab, " ")
            Return RemoveUnsupportedControlCharacters(s)
        End Function

        Friend Shared Function NormalizePlaceholder(value As String) As String
            Return NormalizeSingleLineText(value).Trim()
        End Function

        Friend Shared Function NormalizeMaxLength(value As Integer) As Integer
            If value < 0 Then Return 0
            Return value
        End Function

        Friend Shared Function HasOfficialTextInputBaseRoute() As Boolean
            Return True
        End Function

        Friend Shared Function HasNoNativeTextBoxRoute() As Boolean
            Return True
        End Function

        Private Shared Function RemoveUnsupportedControlCharacters(value As String) As String
            If String.IsNullOrEmpty(value) Then Return String.Empty

            Dim result As New System.Text.StringBuilder(value.Length)
            For Each ch As Char In value
                If Char.IsControl(ch) Then Continue For
                result.Append(ch)
            Next

            Return result.ToString()
        End Function

    End Class

End Namespace
