Option Strict On
Option Explicit On

Imports System
Imports Nexamas.UI.Controls
Imports Nexamas.UI.Theming

Namespace Nexamas.UI.Components

    ''' <summary>
    ''' Friend-owned command, text, enum, and enabled-state policy for MASButton.
    ''' The public control remains the only consumer API; this class keeps runtime
    ''' safety and premium interaction semantics out of the visual/control partials.
    ''' </summary>
    Friend NotInheritable Class MASButtonActivationPolicy
        Private Sub New()
        End Sub

        Friend Shared Function NormalizeText(value As String) As String
            Return If(value, String.Empty)
        End Function

        Friend Shared Function NormalizeTooltip(value As String) As String
            Return If(value, String.Empty)
        End Function

        Friend Shared Function NormalizeExtent(value As Single) As Single
            If Single.IsNaN(value) OrElse Single.IsInfinity(value) OrElse value < 0.0F Then Return 0.0F
            Return value
        End Function

        Friend Shared Function NormalizeCoordinate(value As Single) As Single
            If Single.IsNaN(value) OrElse Single.IsInfinity(value) Then Return 0.0F
            Return value
        End Function

        Friend Shared Function NormalizeIntent(value As MASButtonIntent) As MASButtonIntent
            If [Enum].IsDefined(GetType(MASButtonIntent), value) Then Return value
            Return MASButtonIntent.Default
        End Function

        Friend Shared Function NormalizePersonality(value As MASButtonPersonality) As MASButtonPersonality
            If [Enum].IsDefined(GetType(MASButtonPersonality), value) Then Return value
            Return MASButtonPersonality.MAS
        End Function

        Friend Shared Function NormalizeIconPlacement(value As MASButtonIconPlacement) As MASButtonIconPlacement
            If [Enum].IsDefined(GetType(MASButtonIconPlacement), value) Then Return value
            Return MASButtonIconPlacement.Left
        End Function

        Friend Shared Function CanRenderAsEnabled(isEnabled As Boolean,
                                                  isBusy As Boolean,
                                                  disableWhileBusy As Boolean) As Boolean
            If Not isEnabled Then Return False
            If isBusy AndAlso disableWhileBusy Then Return False
            Return True
        End Function

        Friend Shared Function CanActivate(isEnabled As Boolean,
                                           isVisible As Boolean,
                                           isBusy As Boolean,
                                           disableWhileBusy As Boolean) As Boolean
            If Not isVisible Then Return False
            Return CanRenderAsEnabled(isEnabled, isBusy, disableWhileBusy)
        End Function

        Friend Shared Function EffectiveText(text As String,
                                             busyText As String,
                                             isBusy As Boolean) As String
            If isBusy AndAlso Not String.IsNullOrEmpty(busyText) Then Return busyText
            Return NormalizeText(text)
        End Function

        Friend Shared Function RequiresLayoutInvalidation(oldText As String,
                                                          newText As String) As Boolean
            Return Not String.Equals(If(oldText, String.Empty), If(newText, String.Empty), StringComparison.Ordinal)
        End Function
    End Class

End Namespace
