Option Strict On
Option Explicit On

Namespace Nexamas.UI.FloatRuntime

    ' ============================================================
    ' MASFloatRuntime Contract
    ' Class: MASFloatOpenedEventArgs
    '
    ' Purpose:
    '   Provides external opened-event data after a Float has entered the
    '   Open lifecycle state.
    '
    ' Responsibility:
    '   Exposes the public identity of the opened Float without exposing
    '   internal runtime state, Coordinator, Host, or PolicyEngine.
    '
    ' Owns:
    '   Event data only.
    '
    ' Does Not Own:
    '   Lifecycle state.
    '   Host state.
    '   Session state.
    '   Result state.
    '   Close authorization.
    '
    ' Allowed Dependencies:
    '   MASFloatHandle.
    '
    ' Forbidden Dependencies:
    '   Legacy Overlay classes.
    '   MASFloatCoordinator.
    '   MASFloatRuntimeState.
    '   MASFloatHost.
    '   MASFloatPolicyEngine.
    '
    ' Lifecycle Role:
    '   Created by Coordinator after the Float reaches Open.
    '
    ' Threading:
    '   Immutable after construction.
    '   Must be raised on the UI thread by runtime-owned lifecycle flow.
    '
    ' Mutation Rules:
    '   No public setters.
    '
    ' Invariants:
    '   Handle must represent the opened Float instance.
    '   FloatKey and OwnerKey mirror the Handle identity.
    '
    ' Failure Rules:
    '   Invalid constructor arguments must be rejected immediately.
    ' ============================================================
    Friend NotInheritable Class MASFloatOpenedEventArgs
        Inherits EventArgs

        Friend ReadOnly Property Handle As MASFloatHandle

        Friend ReadOnly Property FloatKey As String

        Friend ReadOnly Property OwnerKey As String

        Friend ReadOnly Property OwnerToken As MASFloatOwnerToken

        Friend Sub New(handle As MASFloatHandle)
            If handle Is Nothing Then
                Throw New ArgumentNullException(NameOf(handle))
            End If

            Me.Handle = handle
            Me.FloatKey = handle.FloatKey
            Me.OwnerKey = handle.OwnerKey
            Me.OwnerToken = handle.OwnerToken
        End Sub

    End Class

End Namespace