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

using Harmony;
using RobocraftX;
using Svelto.ECS;

using GamecraftModdingAPI.Utility;

namespace GamecraftModdingAPI.Events
{
    /// <summary>
    /// Patch of RobocraftX.FullGameCompositionRoot.ActivateGame()
    /// </summary>
    [HarmonyPatch(typeof(FullGameCompositionRoot), "ActivateGame")]
    class GameActivatedPatch
    {
        public static void Postfix(ref EnginesRoot ____mainGameEnginesRoot)
        {
            // register custom game engines
            GameEngineManager.RegisterEngines(____mainGameEnginesRoot);
            // register custom command engines
            GamecraftModdingAPI.Commands.CommandManager.RegisterEngines(____mainGameEnginesRoot);
            // A new EnginesRoot is always created when ActivateGame is called
            // so all event emitters and handlers must be re-registered.
            EventManager.RegisterEngines(____mainGameEnginesRoot);
            Logging.Log("Dispatching Game Activated event");
            EventManager.GetEventEmitter("GamecraftModdingAPIGameActivatedEventEmitter").Emit();
        }
    }
}