Option Strict On
Option Explicit On

Imports System
Imports Nexamas.UI.Components.ContextMenu
Imports Nexamas.UI.Host
Imports SkiaSharp

Namespace Nexamas.UI.Controls

    ''' <summary>
    ''' Internal context-menu factory for RootHost integrations.
    ''' Public SDK code must use MASApplicationWindow.Services.ContextMenus.
    ''' </summary>
    Friend NotInheritable Class MASContextMenuService

        Private Sub New()
        End Sub

        Friend Shared Function Create(rootHost As MASSkiaRootHost,
                                      Optional invalidate As Action = Nothing,
                                      Optional ownerKey As String = Nothing) As MASContextMenuCoordinator

            Return CreateCore(
                rootHost:=rootHost,
                invalidate:=invalidate,
                ownerKey:=ownerKey)
        End Function

        Friend Shared Function ForRootHost(rootHost As MASSkiaRootHost,
                                           Optional invalidate As Action = Nothing,
                                           Optional ownerKey As String = Nothing) As MASContextMenuCoordinator

            Return CreateCore(
                rootHost:=rootHost,
                invalidate:=invalidate,
                ownerKey:=ownerKey)
        End Function

        Friend Shared Function CreateCore(rootHost As MASSkiaRootHost,
                                          Optional invalidate As Action = Nothing,
                                          Optional ownerKey As String = Nothing) As MASContextMenuCoordinator

            If rootHost Is Nothing Then Throw New ArgumentNullException(NameOf(rootHost))

            Return New MASContextMenuCoordinator(
                input:=rootHost.InputCore,
                runtime:=rootHost.FloatRuntimeCore,
                getContext:=Function()
                                Return rootHost.ThemeHostCore.TryGetContext()
                            End Function,
                getViewportBoundsPx:=Function()
                                         Return rootHost.GetSurfaceViewportPx()
                                     End Function,
                invalidate:=invalidate,
                ownerKey:=ownerKey
            )
        End Function

    End Class

End Namespace
