using System;

using RobocraftX.Character;
using RobocraftX.GUI.Hotbar;
using RobocraftX.Players;
using RobocraftX.Common;
using RobocraftX.Common.Input;
using RobocraftX.Common.Players;
using Svelto.ECS;

using GamecraftModdingAPI.Blocks;
using GamecraftModdingAPI.Utility;
using GamecraftModdingAPI.Engines;

namespace GamecraftModdingAPI.Inventory
{
	public class HotbarEngine : IApiEngine
	{
		public string Name { get; } = "GamecraftModdingAPIHotbarGameEngine";

		public EntitiesDB entitiesDB { set; private get; }

		public bool isRemovable => false;

		public bool IsInGame = false;

		public void Dispose()
		{
			IsInGame = false;
		}

		public void Ready()
		{
			IsInGame = true;
		}

		public bool SelectBlock(int block, uint playerID, bool cubeSelectedByPick = false)
		{
			InputEntityStruct[] inputs = entitiesDB.QueryEntities<InputEntityStruct>(InputExclusiveGroups.LocalPlayers).ToFastAccess(out uint count);
			if (count == 0) return false;
			for (int i = 0; i < count; i++)
			{
				if (inputs[i].ID.entityID == playerID) {
					inputs[i].cubeSelectedByPick = cubeSelectedByPick;
					inputs[i].selectedCube = block;
					return true;
				}
			}
			// TODO: expose the rest of the input functionality
			return false;
		}

        public uint GetLocalPlayerID()
		{
			return LocalPlayerIDUtility.GetLocalPlayerID(entitiesDB);
		}
	}
}