package com.newhive.scammerradar.tag;

import com.newhive.scammerradar.ScammerRadarAddon;
import com.newhive.scammerradar.classes.CheckResult;
import com.newhive.scammerradar.config.ScammerRadarConfig;
import com.newhive.scammerradar.helper.subhelper.IconSubHelper;
import net.labymod.api.client.chat.prefix.ChatPrefix;
import net.labymod.api.client.gui.screen.ScreenContext;
import net.labymod.api.client.network.NetworkPlayerInfo;
import net.labymod.api.client.render.font.RenderableComponent;
import net.labymod.api.configuration.labymod.chat.AdvancedChatMessage;
import net.labymod.api.configuration.labymod.chat.ChatTab;
import net.labymod.api.mojang.GameProfile;
import net.labymod.api.util.math.MathHelper;

public class PlayerChatPrefix implements ChatPrefix {
   private final ScammerRadarAddon addon;

   public PlayerChatPrefix(ScammerRadarAddon addon) {
      this.addon = addon;
   }

   public void render(ScreenContext context, float x, float y, AdvancedChatMessage advancedChatMessage, RenderableComponent[] renderableComponents, int index, int subIndex, int lineHeight, float textOffset, double scale, int alpha) {
      if (index == 0 && subIndex == 0) {
         GameProfile gameProfile = this.getProfileFromMessage(advancedChatMessage);
         if (gameProfile != null) {
            double headSize = (double)8.0F * scale;
            int margin = 1;
            CheckResult result = this.addon.getHelper().getPlayerObject(gameProfile.getUniqueId());
            if (result == null) {
               return;
            }

            if (result.mm) {
               context.canvas().submitIcon(IconSubHelper.Tags.MM, x + (float)margin, y + textOffset, (float)headSize, (float)headSize);
            }

            if (result.scammer) {
               context.canvas().submitIcon(IconSubHelper.Tags.SCAMMER, x + (float)margin, y + textOffset, (float)headSize, (float)headSize);
            }

            if (result.localScammer) {
               context.canvas().submitIcon(IconSubHelper.Tags.PRIVATE, x + (float)margin, y + textOffset, (float)headSize, (float)headSize);
            }
         }
      }

   }

   public boolean isVisible(ChatTab chatTab, AdvancedChatMessage advancedChatMessage) {
      if (!(Boolean)((ScammerRadarConfig)this.addon.configuration()).enabled().get()) {
         return false;
      } else if (!(Boolean)((ScammerRadarConfig)this.addon.configuration()).getChat().enabled().get()) {
         return false;
      } else if (((Boolean)((ScammerRadarConfig)this.addon.configuration()).getChat().getChatTagType().get()).equals(false)) {
         return false;
      } else {
         GameProfile profile = this.getProfileFromMessage(advancedChatMessage);
         if (profile == null) {
            return false;
         } else {
            CheckResult result = this.addon.getHelper().getPlayerObject(profile.getUniqueId());
            return result != null;
         }
      }
   }

   public int getWidth(AdvancedChatMessage advancedChatMessage, double scale) {
      double iconSize = (double)8.0F * scale;
      int margin = 2;
      return MathHelper.ceil(iconSize + (double)margin);
   }

   private GameProfile getProfileFromMessage(AdvancedChatMessage chatMessage) {
      if (chatMessage.chatMessage().getSenderProfile() != null) {
         return chatMessage.chatMessage().getSenderProfile();
      } else if (this.addon.labyAPI().minecraft().getClientPacketListener() == null) {
         return null;
      } else {
         String message = chatMessage.chatMessage().getOriginalPlainText();
         if (!message.contains("┃")) {
            return null;
         } else {
            String userName = this.addon.getHelper().getUserFromMessage(message);
            if (userName == null) {
               return null;
            } else {
               NetworkPlayerInfo info = this.addon.labyAPI().minecraft().getClientPacketListener().getNetworkPlayerInfo(userName);
               return info == null ? null : info.profile();
            }
         }
      }
   }
}
