/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-API/src/main/java/org/bukkit/help/IndexHelpTopic.java
package org.bukkit.help;

import java.util.Collection;

import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.util.ChatPaginator;

/**
 * This help topic generates a list of other help topics. This class is useful
 * for adding your own index help topics. To enforce a particular order, use a
 * sorted collection.
 * <p>
 * If a preamble is provided to the constructor, that text will be displayed
 * before the first item in the index.
 */
public class IndexHelpTopic extends HelpTopic {

	protected String permission;
	protected String preamble;
	protected Collection<HelpTopic> allTopics;

	public IndexHelpTopic(String name, String shortText, String permission, Collection<HelpTopic> topics) {
		this(name, shortText, permission, topics, null);
	}

	public IndexHelpTopic(String name, String shortText, String permission, Collection<HelpTopic> topics,
			String preamble) {
		this.name = name;
		this.shortText = shortText;
		this.permission = permission;
		this.preamble = preamble;
		setTopicsCollection(topics);
	}

	/**
	 * Sets the contents of the internal allTopics collection.
	 *
	 * @param topics The topics to set.
	 */
	protected void setTopicsCollection(Collection<HelpTopic> topics) {
		this.allTopics = topics;
	}

	public boolean canSee(CommandSender sender) {
		if (sender instanceof ConsoleCommandSender) {
			return true;
		}
		if (permission == null) {
			return true;
		}
		return sender.hasPermission(permission);
	}

	@Override
	public void amendCanSee(String amendedPermission) {
		permission = amendedPermission;
	}

	public String getFullText(CommandSender sender) {
		StringBuilder sb = new StringBuilder();

		if (preamble != null) {
			sb.append(buildPreamble(sender));
			sb.append("\n");
		}

		for (HelpTopic topic : allTopics) {
			if (topic.canSee(sender)) {
				String lineStr = buildIndexLine(sender, topic).replace("\n", ". ");
				if (sender instanceof Player && lineStr.length() > ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH) {
					sb.append(lineStr.substring(0, ChatPaginator.GUARANTEED_NO_WRAP_CHAT_PAGE_WIDTH - 3));
					sb.append("...");
				} else {
					sb.append(lineStr);
				}
				sb.append("\n");
			}
		}
		return sb.toString();
	}

	/**
	 * Builds the topic preamble. Override this method to change how the index
	 * preamble looks.
	 *
	 * @param sender The command sender requesting the preamble.
	 * @return The topic preamble.
	 */
	protected String buildPreamble(CommandSender sender) {
		return ChatColor.GRAY + preamble;
	}

	/**
	 * Builds individual lines in the index topic. Override this method to change
	 * how index lines are rendered.
	 *
	 * @param sender The command sender requesting the index line.
	 * @param topic  The topic to render into an index line.
	 * @return The rendered index line.
	 */
	protected String buildIndexLine(CommandSender sender, HelpTopic topic) {
		StringBuilder line = new StringBuilder();
		line.append(ChatColor.GOLD);
		line.append(topic.getName());
		line.append(": ");
		line.append(ChatColor.WHITE);
		line.append(topic.getShortText());
		return line.toString();
	}
}
