using System.Linq;

using uREPL;

namespace TechbloxModdingAPI.Commands
{
    public static class ExistingCommands
    {
        public static void Call(string commandName)
		{
			RuntimeCommands.Call(commandName);
		}

		public static void Call<Arg0>(string commandName, Arg0 arg0)
        {
			RuntimeCommands.Call<Arg0>(commandName, arg0);
        }

		public static void Call<Arg0, Arg1>(string commandName, Arg0 arg0, Arg1 arg1)
        {
			RuntimeCommands.Call<Arg0, Arg1>(commandName, arg0, arg1);
        }

		public static void Call<Arg0, Arg1, Arg2>(string commandName, Arg0 arg0, Arg1 arg1, Arg2 arg2)
        {
			RuntimeCommands.Call<Arg0, Arg1, Arg2>(commandName, arg0, arg1, arg2);
        }

        public static bool Exists(string commandName)
        {
			return RuntimeCommands.HasRegistered(commandName);
		}

        public static (string Name, string Description)[] GetCommandNamesAndDescriptions()
        {
	        return RuntimeCommands.table.Values.Select(command => (command.name, command.description)).ToArray();
        }
    }
}