package com.newhive.scammerradar.helper.subhelper;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ChatSubHelper {
   private static final Pattern globalChatRegex = Pattern.compile("^((\\[\\S{1,9}\\]\\s)*)\\w{1,16}\\s\\u2503\\s(\\S{1,32})\\s\\u00BB\\s(.*)");
   private static final Pattern privateChatReceiveRegex = Pattern.compile("^((\\[\\S{1,9}\\]).)*.?\\[\\w{1,16}\\s\\u2503\\s(\\S{1,32}).-> mir\\].(.*)");
   private static final Pattern privateChatSentRegex = Pattern.compile("^((\\[\\S{1,9}\\]).)*.?\\[mir.->.\\w{1,16}\\s\\u2503\\s(\\S{1,32})\\].(.*)");
   private static final Pattern paymentSentRegex = Pattern.compile("^Du hast.\\w{1,16}.\\u2503.(\\S{1,32}).\\$.* gegeben.");
   private static final Pattern paymentReceiveRegex = Pattern.compile("^\\w{1,16}.\\u2503.(\\S{1,32}).hat dir \\$.* gegeben.");

   public String getUserFromMessage(String message) {
      if (this.isGlobalMessage(message)) {
         return this.getUserGlobalMessage(message);
      } else if (this.isPrivateMessage(message)) {
         return this.getUserPrivateMessage(message);
      } else {
         return this.isPayment(message) ? this.getUserPayment(message) : null;
      }
   }

   public boolean isPayment(String message) {
      Matcher matcher_receive = paymentReceiveRegex.matcher(message);
      Matcher matcher_sent = paymentSentRegex.matcher(message);
      return matcher_sent.find() || matcher_receive.find();
   }

   public boolean isPrivateMessage(String message) {
      Matcher matcher_receive = privateChatReceiveRegex.matcher(message);
      Matcher matcher_sent = privateChatSentRegex.matcher(message);
      return matcher_receive.find() || matcher_sent.find();
   }

   public boolean isGlobalMessage(String message) {
      Matcher matcher = globalChatRegex.matcher(message);
      return matcher.find();
   }

   public String getUserGlobalMessage(String message) {
      Matcher matcher = globalChatRegex.matcher(message);
      return matcher.find() ? matcher.group(3) : null;
   }

   public String getUserPrivateMessage(String message) {
      Matcher matcher_receive = privateChatReceiveRegex.matcher(message);
      Matcher matcher_sent = privateChatSentRegex.matcher(message);
      if (matcher_receive.find()) {
         return matcher_receive.group(3);
      } else {
         return matcher_sent.find() ? matcher_sent.group(3) : null;
      }
   }

   public String getUserPayment(String message) {
      Matcher matcher_receive = paymentReceiveRegex.matcher(message);
      Matcher matcher_sent = paymentSentRegex.matcher(message);
      if (matcher_receive.find()) {
         return matcher_receive.group(1);
      } else {
         return matcher_sent.find() ? matcher_sent.group(1) : null;
      }
   }
}
