package protocolsupport.protocol.typeremapper.legacy;

import org.bukkit.ChatColor;

import protocolsupport.api.chat.components.BaseComponent;
import protocolsupport.api.chat.modifiers.Modifier;
import protocolsupport.utils.Utils;

public class LegacyChat {

	public static String toText(BaseComponent component, String locale) {
		if (component == null) {
			return "";
		}
		final StringBuilder out = new StringBuilder();
		toTextSingle(out, locale, component, component.getModifier());
		return out.toString();
	}

	private static void toTextSingle(StringBuilder out, String locale, BaseComponent component, Modifier modifier) {
		if (Utils.isTrue(modifier.hasColor())) {
			out.append(modifier.getColor());
		}
		boolean hadFormat = false;
		if (Utils.isTrue(modifier.isBold())) {
			out.append(ChatColor.BOLD);
			hadFormat = true;
		}
		if (!hadFormat && Utils.isTrue(modifier.isItalic())) {
			out.append(ChatColor.ITALIC);
			hadFormat = true;
		}
		if (!hadFormat && Utils.isTrue(modifier.isUnderlined())) {
			out.append(ChatColor.UNDERLINE);
			hadFormat = true;
		}
		if (!hadFormat && Utils.isTrue(modifier.isStrikethrough())) {
			out.append(ChatColor.STRIKETHROUGH);
			hadFormat = true;
		}
		if (!hadFormat && Utils.isTrue(modifier.isRandom())) {
			out.append(ChatColor.MAGIC);
		}
		out.append(component.getValue(locale));
		for (BaseComponent child : component.getSiblings()) {
			if (out.length() > 0) {
				out.append(ChatColor.RESET);
			}
			Modifier childmodifier = child.getModifier();
			Modifier combinedmodifier = new Modifier();
			combinedmodifier.setColor(childmodifier.hasColor() ? childmodifier.getColor() : modifier.getColor());
			combinedmodifier.setBold(childmodifier.isBold() != null ? childmodifier.isBold() : modifier.isBold());
			combinedmodifier.setItalic(childmodifier.isItalic() != null ? childmodifier.isItalic() : modifier.isItalic());
			combinedmodifier.setUnderlined(childmodifier.isUnderlined() != null ? childmodifier.isUnderlined() : modifier.isUnderlined());
			combinedmodifier.setStrikethrough(childmodifier.isStrikethrough() != null ? childmodifier.isStrikethrough() : modifier.isStrikethrough());
			combinedmodifier.setRandom(childmodifier.isRandom() != null ? childmodifier.isRandom() : modifier.isRandom());
			toTextSingle(out, locale, child, combinedmodifier);
		}
	}

}

@@ -78,16 +78,57 @@
 Color;%0A%0A
+import protocolsupport.api.chat.ChatAPI;%0A
 import p
@@ -177,16 +177,16 @@
 ponent;%0A
-
 import p
@@ -409,16 +409,65 @@
 %22%22;%0A%09%09%7D%0A
+%09%09System.err.println(ChatAPI.toJSON(component));%0A
 %09%09final 
@@ -1485,73 +1485,8 @@
 ) %7B%0A
-%09%09%09if (out.length() %3E 0) %7B%0A%09%09%09%09out.append(ChatColor.RESET);%0A%09%09%09%7D%0A
 %09%09%09M
@@ -2288,16 +2288,16 @@
 dom());%0A
-
 %09%09%09toTex
@@ -2343,16 +2343,48 @@
 ifier);%0A
+%09%09%09out.append(ChatColor.RESET);%0A
 %09%09%7D%0A%09%7D%0A%0A

Append color char after component sibling instead of before