Option Strict On
Option Explicit On

Imports System
Imports System.Windows.Forms
Imports Nexamas.UI.Icons

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Friend-owned interaction and value policy for GlyphButton. GlyphButton is an internal
    ''' MAS affordance, so pointer, focus, keyboard, icon, and state normalization remain here
    ''' instead of leaking public surface or duplicating rules in each consumer toolbar.
    ''' </summary>
    Friend NotInheritable Class GlyphButtonInteractionPolicy
        Private Sub New()
        End Sub

        Friend Shared Function NormalizeIntent(value As GlyphButtonIntent) As GlyphButtonIntent
            If [Enum].IsDefined(GetType(GlyphButtonIntent), value) Then Return value
            Return GlyphButtonIntent.Neutral
        End Function

        Friend Shared Function NormalizeIconKind(value As MASIconKind) As MASIconKind
            If [Enum].IsDefined(GetType(MASIconKind), value) Then Return value
            Return MASIconKind.None
        End Function

        Friend Shared Function NormalizeIconStyle(value As MASIconStyle) As MASIconStyle
            If [Enum].IsDefined(GetType(MASIconStyle), value) Then Return value
            Return MASIconStyle.Outline
        End Function

        Friend Shared Function CanReceiveKeyboardFocus(isEnabled As Boolean) As Boolean
            Return isEnabled
        End Function

        Friend Shared Function CanActivate(isEnabled As Boolean) As Boolean
            Return isEnabled
        End Function

        Friend Shared Function IsKeyboardActivationKey(keyCode As Keys) As Boolean
            Return keyCode = Keys.Enter OrElse keyCode = Keys.Space
        End Function

        Friend Shared Function IsKeyboardCancelKey(keyCode As Keys) As Boolean
            Return keyCode = Keys.Escape
        End Function

        Friend Shared Function ResolveVisualState(isEnabled As Boolean,
                                                  isPressed As Boolean,
                                                  isHovered As Boolean,
                                                  isKeyboardFocused As Boolean) As GlyphButtonVisualState
            If Not isEnabled Then Return GlyphButtonVisualState.Disabled
            If isPressed Then Return GlyphButtonVisualState.Pressed
            If isHovered Then Return GlyphButtonVisualState.Hover
            If isKeyboardFocused Then Return GlyphButtonVisualState.Focused
            Return GlyphButtonVisualState.Normal
        End Function
    End Class

End Namespace
