/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
package org.bukkit.craftbukkit.command;

import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;

import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.util.Waitable;

import jline.console.completer.Completer;

public class ConsoleCommandCompleter implements Completer {
	private final CraftServer server;

	public ConsoleCommandCompleter(CraftServer server) {
		this.server = server;
	}

	@Override
	public int complete(final String buffer, final int cursor, final List<CharSequence> candidates) {
		Waitable<List<String>> waitable = new Waitable<List<String>>() {
			@Override
			protected List<String> evaluate() {
				return server.getCommandMap().tabComplete(server.getConsoleSender(), buffer);
			}
		};
		this.server.getServer().processQueue.add(waitable);
		try {
			List<String> offers = waitable.get();
			if (offers == null) {
				return cursor;
			}
			candidates.addAll(offers);

			final int lastSpace = buffer.lastIndexOf(' ');
			if (lastSpace == -1) {
				return cursor - buffer.length();
			} else {
				return cursor - (buffer.length() - lastSpace - 1);
			}
		} catch (ExecutionException e) {
			this.server.getLogger().log(Level.WARNING, "Unhandled exception when tab completing", e);
		} catch (InterruptedException e) {
			Thread.currentThread().interrupt();
		}
		return cursor;
	}
}
