namespace Syntriax.Engine.Core.Abstract;

/// <summary>
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IStateEnable"/> field.
/// </summary>
public interface IHasStateEnable : IAssignable
{
    /// <summary>
    /// Event triggered when the <see cref="IStateEnable"/> value has has been assigned a new value.
    /// </summary>
    event OnStateEnableAssignedEventHandler? OnStateEnableAssigned;

    /// <inheritdoc cref="IStateEnable" />
    IStateEnable StateEnable { get; }

    /// <summary>
    /// Assign a value to the <see cref="IStateEnable"/> field of this object.
    /// </summary>
    /// <param name="stateEnable">New <see cref="IStateEnable"/> to assign.</param>
    /// <returns> 
    /// <see cref="true"/>, if the value given assigned successfully assigned, <see cref="false"/> if not.
    /// </returns>
    bool Assign(IStateEnable stateEnable);

    delegate void OnStateEnableAssignedEventHandler(IHasStateEnable sender);
}