Option Strict On
Option Explicit On

Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports Nexamas.UI.Components
Imports Nexamas.UI.General
Imports Nexamas.UI.Rendering
Imports Nexamas.UI.Scroll
Imports Nexamas.UI.SkiaScroll
Imports Nexamas.UI.Theming
Imports Nexamas.UI.Layout
Imports SkiaSharp

Namespace Nexamas.UI.FloatRuntime

    Partial Friend NotInheritable Class MASMessageBoxFloatContent









        Private Function GetButtonCount() As Integer

            If _layout Is Nothing Then Return 0
            If _layout.ButtonRects Is Nothing Then Return 0

            Return _layout.ButtonRects.Count

        End Function


        Private Sub EnsureButtonStates(buttonCount As Integer)

            If _state Is Nothing Then Return

            If _state.ButtonStates Is Nothing Then
                _state.ButtonStates = New List(Of MASButtonState)()
            End If

            While _state.ButtonStates.Count < buttonCount
                _state.ButtonStates.Add(MASButtonState.CreateDefault())
            End While

            While _state.ButtonStates.Count > buttonCount
                _state.ButtonStates.RemoveAt(_state.ButtonStates.Count - 1)
            End While

        End Sub


        Private Function SyncButtonStatesFromPointer(ptPx As SKPoint,
                                             pressedIndex As Integer) As Boolean

            If _layout Is Nothing Then Return False
            If _layout.ButtonRects Is Nothing Then Return False

            Dim count As Integer = _layout.ButtonRects.Count
            EnsureButtonStates(count)

            Dim changed As Boolean = False

            For i As Integer = 0 To count - 1

                Dim hovered As Boolean =
            Contains(_layout.ButtonRects(i), ptPx)

                Dim pressed As Boolean =
            (pressedIndex = i AndAlso hovered)

                Dim state As MASButtonState = _state.ButtonStates(i)

                If Not state.IsEnabled Then
                    state.IsEnabled = True
                    changed = True
                End If

                If state.IsHovered <> hovered Then
                    state.IsHovered = hovered
                    changed = True
                End If

                If state.IsPressed <> pressed Then
                    state.IsPressed = pressed
                    changed = True
                End If

                If state.IsFocused Then
                    state.IsFocused = False
                    changed = True
                End If

                _state.ButtonStates(i) = state

            Next

            Return changed

        End Function


        Private Sub ClearButtonPressedStates()

            If _state Is Nothing Then Return
            If _state.ButtonStates Is Nothing Then Return

            For i As Integer = 0 To _state.ButtonStates.Count - 1

                Dim state As MASButtonState = _state.ButtonStates(i)

                If state.IsPressed Then
                    state.IsPressed = False
                    _state.ButtonStates(i) = state
                End If

            Next

        End Sub


        Private Sub ClearButtonHoverStates()

            If _state Is Nothing Then Return
            If _state.ButtonStates Is Nothing Then Return

            For i As Integer = 0 To _state.ButtonStates.Count - 1

                Dim state As MASButtonState = _state.ButtonStates(i)

                If state.IsHovered OrElse state.IsPressed OrElse state.IsFocused Then
                    state.IsHovered = False
                    state.IsPressed = False
                    state.IsFocused = False
                    _state.ButtonStates(i) = state
                End If

            Next

        End Sub
    End Class

End Namespace
