Tikfinity/Actions/TikfinityForwardAction.cs
using Sandbox;

namespace TikfinitySbox;

/// <summary>
/// Forwards one route to a component on a chosen GameObject implementing ITikfinityInteractionTarget.
/// </summary>
public sealed class TikfinityForwardAction : Component, ITikfinityEvents
{
    [Property] public string Route { get; set; } = "gift.forward";
    [Property] public GameObject Target { get; set; }

    void ITikfinityEvents.OnInteraction( TikfinityInteraction interaction )
    {
        if ( !Networking.IsHost || interaction is null ) return;
        if ( !string.Equals( Route?.Trim(), interaction.Route, System.StringComparison.OrdinalIgnoreCase ) ) return;
        if ( !Target.IsValid() ) return;

        var receiver = Target.Components.Get<ITikfinityInteractionTarget>();
        if ( receiver is null )
        {
            Log.Warning( $"TikFinity forward action '{Route}' has no ITikfinityInteractionTarget on {Target.Name}." );
            return;
        }

        receiver.ApplyTikfinityInteraction( interaction );
    }
}