package tc.oc.commons.bukkit.report; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import com.google.common.collect.ImmutableList; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.BaseComponent; import tc.oc.api.docs.Report; import tc.oc.api.servers.ServerStore; import tc.oc.commons.bukkit.chat.NameStyle; import tc.oc.commons.bukkit.chat.PlayerComponent; import tc.oc.commons.bukkit.commands.CommandUtils; import tc.oc.commons.bukkit.format.ServerFormatter; import tc.oc.commons.bukkit.nick.IdentityProvider; import tc.oc.commons.core.chat.Component; import tc.oc.commons.core.chat.Components; import tc.oc.commons.core.formatting.PeriodFormats; public class ReportFormatter { private final IdentityProvider identityProvider; private final ServerStore servers; @Inject ReportFormatter(IdentityProvider identityProvider, ServerStore servers) { this.identityProvider = identityProvider; this.servers = servers; } public List<? extends BaseComponent> format(Report report, boolean showServer, boolean showTime) { final List<BaseComponent> parts = new ArrayList<>(); parts.add(new Component( new Component("["), new Component("Rep", ChatColor.GOLD), new Component("]") )); if(showServer) { // Server may be soft-deleted, so we can't assume it's synced servers.tryId(report.server_id()).ifPresent( server -> parts.add(ServerFormatter.light.nameWithDatacenter(server)) ); } if(report.staff_online() != null) { final int modCount = report.staff_online().size(); parts.add(new Component( new Component("("), new Component(modCount, modCount > 0 ? ChatColor.GREEN : ChatColor.RED), new Component(")") )); } if(showTime) { parts.add(new Component(PeriodFormats.relativePastApproximate(report.created_at()), ChatColor.GREEN)); } if(report.reporter() != null) { parts.add(new PlayerComponent(identityProvider.currentIdentity(report.reporter()), NameStyle.FANCY)); } else { parts.add(CommandUtils.CONSOLE_COMPONENT_NAME); } parts.add(new Component("\u2794")); parts.add(new Component( new PlayerComponent(identityProvider.currentIdentity(report.reported()), NameStyle.FANCY), new Component(": ") )); return ImmutableList.of(Components.join(Components.space(), parts), new Component(" " + report.reason(), ChatColor.LIGHT_PURPLE)); } }