package com.l7tech.policy.assertion;

import com.l7tech.policy.variable.DataType;
import com.l7tech.policy.variable.VariableMetadata;
import org.jetbrains.annotations.Nullable;

public class Regex extends MessageTargetableAssertion implements UsesVariables, SetsVariables {
   private String regex;
   private String replacement;
   private boolean caseInsensitive;
   private boolean replace;
   private boolean findAll = false;
   private int replaceRepeatCount = 0;
   private boolean includeEntireExpressionCapture = true;
   private boolean patternContainsVariables = false;
   private int mimePart = 0;
   private boolean proceedIfPatternMatches = true;
   private String encoding;
   @Nullable
   private String regexName;
   private String captureVar = null;
   private String regexVar = null;
   private boolean autoTarget = true;
   private static final String baseName;
   static final AssertionNodeNameFactory policyNameFactory;
   static final long serialVersionUID = -474338580590640054L;
   private static final String[] b;

   public boolean isAutoTarget() {
      return this.autoTarget;
   }

   public void setAutoTarget(boolean var1) {
      this.autoTarget = var1;
   }

   public String getRegex() {
      return this.regex;
   }

   public void setRegex(String var1) {
      this.regex = var1;
   }

   public String getReplacement() {
      return this.replacement;
   }

   public void setReplacement(String var1) {
      this.replacement = var1;
   }

   public boolean isCaseInsensitive() {
      return this.caseInsensitive;
   }

   public void setCaseInsensitive(boolean var1) {
      this.caseInsensitive = var1;
   }

   public boolean isReplace() {
      return this.replace;
   }

   public void setReplace(boolean var1) {
      this.replace = var1;
      this.setTargetModifiedByGateway(var1);
   }

   public int getReplaceRepeatCount() {
      return this.replaceRepeatCount;
   }

   public void setReplaceRepeatCount(int var1) {
      this.replaceRepeatCount = var1;
   }

   public boolean isIncludeEntireExpressionCapture() {
      return this.includeEntireExpressionCapture;
   }

   public void setIncludeEntireExpressionCapture(boolean var1) {
      this.includeEntireExpressionCapture = var1;
   }

   public boolean isFindAll() {
      return this.findAll;
   }

   public void setFindAll(boolean var1) {
      this.findAll = var1;
   }

   public boolean isPatternContainsVariables() {
      return this.patternContainsVariables;
   }

   public void setPatternContainsVariables(boolean var1) {
      this.patternContainsVariables = var1;
   }

   public boolean isProceedIfPatternMatches() {
      return this.proceedIfPatternMatches;
   }

   public void setProceedIfPatternMatches(boolean var1) {
      this.proceedIfPatternMatches = var1;
   }

   public int getMimePart() {
      return this.mimePart;
   }

   public void setMimePart(int var1) {
      this.mimePart = var1;
   }

   public String getEncoding() {
      return this.encoding;
   }

   public void setEncoding(String var1) {
      this.encoding = var1;
   }

   @Nullable
   public String getRegexName() {
      return this.regexName;
   }

   public void setRegexName(@Nullable String var1) {
      this.regexName = var1;
   }

   public String getCaptureVar() {
      return this.captureVar;
   }

   public void setRegexVar(@Nullable String var1) {
      this.regexVar = var1;
   }

   public String getRegexVar() {
      return this.regexVar;
   }

   public void setCaptureVar(String var1) {
      if (var1 != null && var1.trim().length() < 1) {
         var1 = null;
      }

      this.captureVar = var1;
   }

   @Override
   protected MessageTargetableAssertion.VariablesUsed doGetVariablesUsed() {
      return super.doGetVariablesUsed().withExpressions(this.replacement, this.patternContainsVariables ? this.regex : null);
   }

   @Override
   protected MessageTargetableAssertion.VariablesSet doGetVariablesSet() {
      return super.doGetVariablesSet()
         .withVariables(
            this.captureVar == null ? null : new VariableMetadata(this.captureVar, false, true, this.captureVar, true, DataType.STRING),
            this.regexVar == null ? null : new VariableMetadata(this.regexVar, false, true, this.regexVar, true, DataType.STRING)
         );
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = this.defaultMeta();
      String[] var2 = b;
      var1.put(var2[14], new String[]{var2[6]});
      var1.put(var2[1], var2[9]);
      var1.put(var2[11], var2[4]);
      var1.put(var2[7], var2[15]);
      var1.put(var2[3], policyNameFactory);
      var1.put(var2[5], var2[10]);
      var1.put(var2[13], var2[12]);
      var1.put(var2[8], var2[0]);
      return var1;
   }

   static {
      String[] var5 = new String[16];
      int var3 = 0;
      String var2 = ".o*1\u0013B3(c/1\u001c\u001a)>o+{P\u0007\">o2l\u001c\u00104bP5q\u000f\u001059i\"mNCi*i!\t>h(l\u000b;& e\u001b\bv&r\n\u00143( \u0015{\u0018\u0000+,rg[\u0007\u00055(s4w\u0010\u001b\u0015=o+w\u001c\f\t\"d\"P\u001e\u0018\"\u000ba$j\u0010\u0007>9\bv&r\n\u00143( &>\r\u0010 8l&l_\u0010?=r\"m\f\u001c(# &y\u001e\u001c)>tgj\u0017\u0010g9a5y\u001a\u0001g e4m\u001e\u0012\"c\u0019=r(n\u001a\u00073$e4_\u001c\u0001.\"n\u0004r\u001e\u00064#a*{\u00035m+\u000f=a+{\u000b\u0001\"\u0003o#{6\u0016(#\u0014=r(n\u001a\u00073$e4_\u001c\u0001.\"n\u000e}\u0010\u001b\u001b\bv&r\n\u00143( \u0015{\u0018\u0000+,rg[\u0007\u00055(s4w\u0010\u001b/.o*0\u0013B3(c/0\u001c\u001a)>o+{Q\u0014$9i(pQ'\"*e?N\r\u001a7(r3w\u001a\u0006\u0006.t.q\u0011\u000b)e4}\r\u001c79i(p\u001d\u001fe k\u0013\u00145mE?n\r\u00104>i(p_%5\"p\"l\u000b\u001c\">\u0014=r(n\u001a\u00073$e4_\u001c\u0001.\"n\t\u007f\u0012\u0010";
      int var4 = ".o*1\u0013B3(c/1\u001c\u001a)>o+{P\u0007\">o2l\u001c\u00104bP5q\u000f\u001059i\"mNCi*i!\t>h(l\u000b;& e\u001b\bv&r\n\u00143( \u0015{\u0018\u0000+,rg[\u0007\u00055(s4w\u0010\u001b\u0015=o+w\u001c\f\t\"d\"P\u001e\u0018\"\u000ba$j\u0010\u0007>9\bv&r\n\u00143( &>\r\u0010 8l&l_\u0010?=r\"m\f\u001c(# &y\u001e\u001c)>tgj\u0017\u0010g9a5y\u001a\u0001g e4m\u001e\u0012\"c\u0019=r(n\u001a\u00073$e4_\u001c\u0001.\"n\u0004r\u001e\u00064#a*{\u00035m+\u000f=a+{\u000b\u0001\"\u0003o#{6\u0016(#\u0014=r(n\u001a\u00073$e4_\u001c\u0001.\"n\u000e}\u0010\u001b\u001b\bv&r\n\u00143( \u0015{\u0018\u0000+,rg[\u0007\u00055(s4w\u0010\u001b/.o*0\u0013B3(c/0\u001c\u001a)>o+{Q\u0014$9i(pQ'\"*e?N\r\u001a7(r3w\u001a\u0006\u0006.t.q\u0011\u000b)e4}\r\u001c79i(p\u001d\u001fe k\u0013\u00145mE?n\r\u00104>i(p_%5\"p\"l\u000b\u001c\">\u0014=r(n\u001a\u00073$e4_\u001c\u0001.\"n\t\u007f\u0012\u0010"
         .length();
      char var1 = '-';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 12;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     baseName = b[2];
                     policyNameFactory = new bd();
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "5i#s\u0003\t*\u0003g#r\u0012\u000f<(&g\"9\u001bJ; k'9\u0014\u0012!6g#sX\u000f*6g:d\u0014\u0018<jz*q\u0012\u0005~s&(\u007f\u0011";
                  var4 = "5i#s\u0003\t*\u0003g#r\u0012\u000f<(&g\"9\u001bJ; k'9\u0014\u0012!6g#sX\u000f*6g:d\u0014\u0018<jz*q\u0012\u0005~s&(\u007f\u0011"
                     .length();
                  var1 = 14;
                  var7 = -1;
            }

            var10000 = 4;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static char[] b(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 75);
      }

      return var10000;
   }

   private static String b(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 65;
            case 1 -> 12;
            case 2 -> 75;
            case 3 -> 18;
            case 4 -> 115;
            case 5 -> 121;
            default -> 75;
         });
      }

      return new String(var10001).intern();
   }
}
