Option Strict On
Option Explicit On

Namespace Nexamas.UI.FloatRuntime

    ' ============================================================
    ' MASFloatRuntime Contract
    ' Class: MASFloatPresentation
    '
    ' Purpose:
    '   Describes the requested appearance and transition behavior of a
    '   Float instance.
    '
    ' Responsibility:
    '   Stores presentation intent such as placement, transition, duration,
    '   easing, and background dimming.
    '
    ' Owns:
    '   Presentation option values only.
    '
    ' Does Not Own:
    '   Geometry calculation.
    '   Animation execution.
    '   Host rendering.
    '   Lifecycle transitions.
    '   Input blocking.
    '
    ' Allowed Dependencies:
    '   MASFloatPlacement.
    '   MASFloatTransitionKind.
    '   MASFloatEasing.
    '   MASFloatTransitionOriginKind.
    '
    ' Forbidden Dependencies:
    '   Legacy Overlay classes.
    '   MASFloatPresentationEngine concrete type.
    '   MASFloatTransitionEngine concrete type.
    '   MASFloatHost.
    '
    ' Lifecycle Role:
    '   Request/resolved-request option consumed by presentation and
    '   transition engines.
    '
    ' Threading:
    '   Presentation should be created and mutated before show on the UI
    '   thread. Runtime must snapshot or resolve before internal use.
    '
    ' Mutation Rules:
    '   Public mutable properties are allowed as request/options data.
    '   Runtime-owned resolved state must not depend on later external
    '   mutation of this object.
    '
    ' Invariants:
    '   Presentation describes appearance.
    '   Presentation does not execute lifecycle.
    '   DurationMs must not be negative.
    '   DimOpacity must be clamped by presentation/runtime logic.
    '
    ' Failure Rules:
    '   Invalid values must be normalized or rejected by PresentationEngine.
    ' ============================================================
    Friend NotInheritable Class MASFloatPresentation

        Friend Property Placement As MASFloatPlacement = MASFloatPlacement.Center

        Friend Property Transition As MASFloatTransitionKind = MASFloatTransitionKind.Fade

        Friend Property DurationMs As Integer = 180

        Friend Property Easing As MASFloatEasing = MASFloatEasing.Standard

        Friend Property DimBackground As Boolean = False

        Friend Property DimOpacity As Single = 0.32F

        Friend Property CloseTransition As MASFloatTransitionKind = MASFloatTransitionKind.Fade

        Friend Property TransitionOrigin As MASFloatTransitionOriginKind = MASFloatTransitionOriginKind.Auto

        Friend Function Clone() As MASFloatPresentation
            Return New MASFloatPresentation() With {
                .Placement = Me.Placement,
                .Transition = Me.Transition,
                .DurationMs = Me.DurationMs,
                .Easing = Me.Easing,
                .DimBackground = Me.DimBackground,
                .DimOpacity = Me.DimOpacity,
                .CloseTransition = Me.CloseTransition,
                .TransitionOrigin = Me.TransitionOrigin
            }
        End Function

    End Class

End Namespace