package net.mc_pandacraft.java.plugin.pandacraftutils.commands;

import java.util.HashMap;

import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;

/**
 * Initialise et stoque toutes les instances des classes exécutant les commandes Minecraft, géré par le plugin
 */
public class PandacraftUtilsCommandsManager {
	
	private static PandacraftUtilsCommandsManager instance;
	
	/**
	 * Retourne l'unique instance de la classe. Si elle n'existe pas, on tente de créer
	 * @return L'unique instance de la classe
	 */
	public synchronized static PandacraftUtilsCommandsManager getInstance() {
		if (instance == null)
			loadNewInstance();
		return instance;
	}
	
	public synchronized static void loadNewInstance() {
		instance = new PandacraftUtilsCommandsManager();
	}
	
	
	
	
	
	private PandacraftUtils plugin = PandacraftUtils.getInstance();
	
	
	
	
	
	private HashMap<String, AbstractCommandExecutor> commandExecutors = new HashMap<String, AbstractCommandExecutor>();
	
	private PandacraftUtilsCommandsManager() {
		
		/*
		 * Initialisation des commandes
		 */
		add(new Command_Selection());
		add(new CommandAdmin());
		add(new CommandAfk());
		add(new CommandAutomessager());
		add(new CommandBroadcast());
		add(new CommandCubo());
		add(new CommandList());
		add(new CommandMe());
		add(new CommandPing());
		add(new CommandSetblock());
		add(new CommandStaff());
		add(new CommandSystem());
		add(new CommandAnimal());
		add(new CommandCoeur());
		add(new CommandMuco());
		add(new CommandModo());
		add(new CommandGhost());
		add(new CommandTell());
		add(new CommandMail());
		add(new CommandReply());
		
		// complétion des commandes des autres plugins
		plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
			@Override public void run() {
				plugin.getServer().getPluginCommand("region").setTabCompleter(new TabCompleterWorldGuardRegion());
			}
		}, 1L);
		
		
	}
	
	
	
	
	
	
	private void add(AbstractCommandExecutor ace) {
		commandExecutors.put(ace.getCommandName(), ace);
	}
	
	public AbstractCommandExecutor get(String cmdName) {
		return commandExecutors.get(cmdName);
	}
	
}