Imports System.Text
Imports System.Text.RegularExpressions

Public Class ClassHelper
    Public Shared Function encode_utf8(ByVal str As String) As String
        Try
            'supply True as the construction parameter to indicate
            'that you wanted the class to emit BOM (Byte Order Mark)
            'NOTE: this BOM value is the indicator of a UTF-8 string
            Dim utf8Encoding As New System.Text.UTF8Encoding(True)
            Dim encodedString() As Byte
            encodedString = utf8Encoding.GetBytes(str)
            If LogErrorsOnly = False Then ClassLogger.Add(String.Format(" >> String {0} was encoded via utf8 to {1}", str, utf8Encoding.GetString(encodedString)), False)
            Return utf8Encoding.GetString(encodedString)
        Catch ex As Exception
            ClassLogger.Add("Unexpected error in encode_utf8: " & ex.Message)
            Return Nothing
        End Try

    End Function
    Public Shared Function StringAsUtf8Bytes(ByVal strData As String) As Byte()
        Try
            Dim bytes() As Byte
            ' get unicode string as bytes
            bytes = Encoding.UTF8.GetBytes(strData)
            ' return byte data
            Return bytes
        Catch ex As Exception
            ClassLogger.Add("Unexpected error in StringAsUtf8Bytes: " & ex.Message)
            Return Nothing
        End Try

    End Function
    Public Shared Function CheckSpecialSigns(ByVal str As String)
        Try
            Dim pattern As String = "[!""#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~\s]"
            Dim matches As MatchCollection = Regex.Matches(str, pattern)
            Return matches.Count
        Catch ex As Exception
            ClassLogger.Add("Unexpected error in CheckSpecialSigns: " & ex.Message)
            Return 0
        End Try
    End Function
    Public Shared Sub Refresh_RegexTable()
        CURRENT_DT_REGEX = ClassDatabase.Return_Datatable("SELECT * FROM TBGI_FUNCTION_REGEX")
    End Sub

    ''' <summary>
    ''' Überprüft einen Wert auf verschiedene Arten von "Null" und gibt einen Standard-Wert zurück, wenn der Wert "Null" ist.
    ''' </summary>
    ''' <param name="value">Der zu überprüfende Wert</param>
    ''' <param name="defaultValue">Der Standard Wert</param>
    ''' <returns>value oder wenn dieser "Null" ist, defaultValue</returns>
    Public Shared Function NotNull(Of T)(ByVal value As T, ByVal defaultValue As T) As T
        If IsNothing(value) OrElse String.IsNullOrEmpty(value.ToString) OrElse IsDBNull(value) Then
            Return defaultValue
        Else
            Return value
        End If
    End Function

End Class
