using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Svelto.ECS;

using GamecraftModdingAPI.Utility;

namespace GamecraftModdingAPI.Events
{
    /// <summary>
    /// Engine interface to create a ModEventEntityStruct in entitiesDB when Emit() is called.
    /// </summary>
    public interface IEventEmitterEngine : IApiEngine
    {
        /// <summary>
        /// The type of event emitted
        /// </summary>
        int type { get; }

        /// <summary>
        /// Whether the emitter can be removed with Manager.RemoveEventEmitter(name)
        /// </summary>
        bool isRemovable { get; } 

        /// <summary>
        /// The EntityFactory for the entitiesDB.
        /// Use this to create a ModEventEntityStruct when Emit() is called.
        /// </summary>
        IEntityFactory Factory { set; }

        /// <summary>
        /// Emit the event so IEventHandlerEngines can handle it.
        /// Call Emit() to trigger the IEventEmitterEngine's event.
        /// </summary>
        void Emit();
    }
}