Option Strict On
Option Explicit On

Imports System
Imports Nexamas.UI.Components.DropDownMenu
Imports SkiaSharp

Namespace Nexamas.UI.Components.ContextMenu

    ''' <summary>
    ''' Defines a logical MAS control region that can open a context menu.
    ''' Runtime pointer positions are converted from SK surface pixels to this
    ''' logical coordinate space by MASContextMenuCoordinator before hit-testing.
    ''' </summary>
    Friend NotInheritable Class MASContextMenuScope

        Friend Sub New(key As String,
                       regionLogical As SKRect,
                       buildMenu As Action(Of MASDropDownMenuBuilder))

            Me.Key = If(key, String.Empty)
            Me.RegionLogical = regionLogical
            Me.BuildMenu = buildMenu
        End Sub

        Friend ReadOnly Property Key As String
        Friend Property RegionLogical As SKRect
        Friend Property BuildMenu As Action(Of MASDropDownMenuBuilder)

        Friend Function Contains(clientPt As SKPoint) As Boolean
            If RegionLogical.IsEmpty Then Return False
            If RegionLogical.Width <= 1.0F OrElse RegionLogical.Height <= 1.0F Then Return False
            Return RegionLogical.Contains(clientPt.X, clientPt.Y)
        End Function

#Region "SDK Fluent API"

        Friend Shared Function Create(key As String,
                                      regionLogical As SKRect,
                                      buildMenu As Action(Of MASDropDownMenuBuilder)) As MASContextMenuScope

            Return New MASContextMenuScope(
                key:=key,
                regionLogical:=regionLogical,
                buildMenu:=buildMenu
            )
        End Function

        Friend Function WithRegion(regionLogical As SKRect) As MASContextMenuScope
            Me.RegionLogical = regionLogical
            Return Me
        End Function

        Friend Function WithMenu(buildMenu As Action(Of MASDropDownMenuBuilder)) As MASContextMenuScope
            Me.BuildMenu = buildMenu
            Return Me
        End Function

#End Region
    End Class

End Namespace