Option Strict On
Option Explicit On

Namespace Nexamas.UI.Localization

    ''' <summary>
    ''' Immutable public description of a supported product culture profile.
    ''' </summary>
    ''' <remarks>
    ''' This entry contains culture, direction, mirroring, and formatting facts only. It is safe
    ''' for external consumers, documentation, gates, and design tools to consume without accessing runtime internals.
    ''' </remarks>
    Friend NotInheritable Class MASLocalizationCultureEntry
        Friend Sub New(cultureName As String,
                       englishName As String,
                       nativeName As String,
                       displayName As String,
                       textDirection As MASLocalizationTextDirection,
                       layoutFlow As MASLocalizationLayoutFlow,
                       decimalSeparator As String,
                       shortDatePattern As String)
            Me.CultureName = Normalize(cultureName)
            Me.EnglishName = Normalize(englishName)
            Me.NativeName = Normalize(nativeName)
            Me.DisplayName = Normalize(displayName)
            Me.TextDirection = textDirection
            Me.LayoutFlow = layoutFlow
            Me.DecimalSeparator = Normalize(decimalSeparator)
            Me.ShortDatePattern = Normalize(shortDatePattern)
        End Sub

        Friend ReadOnly Property CultureName As String
        Friend ReadOnly Property EnglishName As String
        Friend ReadOnly Property NativeName As String
        Friend ReadOnly Property DisplayName As String
        Friend ReadOnly Property TextDirection As MASLocalizationTextDirection
        Friend ReadOnly Property LayoutFlow As MASLocalizationLayoutFlow
        Friend ReadOnly Property DecimalSeparator As String
        Friend ReadOnly Property ShortDatePattern As String

        Friend ReadOnly Property IsRightToLeft As Boolean
            Get
                Return TextDirection = MASLocalizationTextDirection.RightToLeft
            End Get
        End Property

        Friend ReadOnly Property UsesMirroredLayout As Boolean
            Get
                Return LayoutFlow = MASLocalizationLayoutFlow.Mirrored
            End Get
        End Property

        Private Shared Function Normalize(value As String) As String
            Return If(value, String.Empty).Trim()
        End Function
    End Class

End Namespace
