using System;

using Unity.Jobs;
using RobocraftX.StateSync;
using Svelto.ECS;

using GamecraftModdingAPI.Utility;

namespace GamecraftModdingAPI.Events
{
    /// <summary>
    /// Event emitter engine for switching to simulation mode.
    /// </summary>
	public class GameStateSimulationEmitterEngine : IEventEmitterEngine, IInitializeOnSimulationStart
	{
		public string Name { get; } = "GamecraftModdingAPIGameStateSimulationEventEmitter" ;

		public IEntitiesDB entitiesDB { set; private get; }

		public object type { get; } = EventType.SimulationSwitchedTo;

		public bool isRemovable { get; } = false;

		public IEntityFactory Factory { set; private get; }

		public void Dispose() { }

		public void Emit()
		{
			Logging.Log("Dispatching Simulation Switched To event");
			if (Factory == null) { return; }
			Factory.BuildEntity<ModEventEntityDescriptor>(ApiExclusiveGroups.eventID++, ApiExclusiveGroups.eventsExclusiveGroup)
			       .Init(new ModEventEntityStruct { type = type });
		}

		public JobHandle OnInitializeSimulationMode()
		{
			Emit();
			return default(JobHandle);
		}

		public void Ready() { }
	}
}