package com.l7tech.policy.assertion.xml;

import com.l7tech.policy.assertion.AssertionMetadata;
import com.l7tech.policy.assertion.AssertionNodeNameFactory;
import com.l7tech.policy.assertion.DefaultAssertionMetadata;
import com.l7tech.policy.assertion.MessageTargetableAssertion;
import com.l7tech.policy.assertion.annotation.RequiresXML;
import com.l7tech.policy.wsp.Java5EnumTypeMapping;
import com.l7tech.policy.wsp.SimpleTypeMappingFinder;
import java.util.Arrays;

@RequiresXML
public class RemoveElement extends MessageTargetableAssertion {
   private static final String META_INITIALIZED;
   private String elementFromVariable;
   private String elementToInsertVariable;
   private RemoveElement.ElementLocation insertedElementLocation;
   private static final String baseName;
   private static final String baseNameRemove;
   private static final String baseNameInsert;
   static final AssertionNodeNameFactory policyNameFactory;
   static final long serialVersionUID = 3792259773787122152L;
   private static final String[] b;

   public RemoveElement() {
      super(true);
   }

   public String getElementFromVariable() {
      return this.elementFromVariable;
   }

   public void setElementFromVariable(String var1) {
      this.elementFromVariable = var1;
   }

   public String getElementToInsertVariable() {
      return this.elementToInsertVariable;
   }

   public void setElementToInsertVariable(String var1) {
      this.elementToInsertVariable = var1;
   }

   public RemoveElement.ElementLocation getInsertedElementLocation() {
      return this.insertedElementLocation;
   }

   public void setInsertedElementLocation(RemoveElement.ElementLocation var1) {
      this.insertedElementLocation = var1;
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = this.defaultMeta();
      if (Boolean.TRUE.equals(var1.get(META_INITIALIZED))) {
         return var1;
      }

      String[] var2 = b;
      var1.put(var2[17], var2[5]);
      var1.put(var2[16], var2[12]);
      var1.put(var2[1], policyNameFactory);
      var1.put(var2[6], var2[11]);
      var1.put(var2[15], var2[18]);
      var1.put(var2[19], new String[]{var2[14]});
      var1.put(var2[9], var2[0]);
      var1.put(var2[10], new SimpleTypeMappingFinder(Arrays.asList(new Java5EnumTypeMapping(RemoveElement.ElementLocation.class, var2[2]))));
      var1.put(META_INITIALIZED, Boolean.TRUE);
      return var1;
   }

   @Override
   protected MessageTargetableAssertion.VariablesUsed doGetVariablesUsed() {
      return super.doGetVariablesUsed()
         .withExpressions(this.elementFromVariable != null ? b[7] + this.elementFromVariable + "}" : null)
         .withVariables(this.insertedElementLocation != null ? this.elementToInsertVariable : null);
   }

   static {
      String[] var5 = new String[20];
      int var3 = 0;
      String var2 = "5D]+\u0015$^E-q\u0012&;UL\ns\u0006\r\u0012PJ0}\u0019\u0011\u0017=_Z!`\u001f\r0tE!\u007f\u000e\u0006 }F's\u001f\u0001;_\u0014z\\L0s\u000f\t P`*{\u001f\u00015]@>w\u000f\u0015\u0006TD+d\u000eH\f|edW\u0007\r9TG0:\u0018A\u001c\u0015UMd}\u0019H\u0006TD+d\u000eH\f|edW\u0007\r9TG0:\u0018A\u0019$CF4w\u0019\u001c=TZ\u0001v\u0002\u001c;Cj(s\u0018\u001b:PD!\u0002pJ\u0012\u0015UMdJ&$ttE!\u007f\u000e\u0006 \u0019Zm\u0015$^E-q\u0012)0G@'w(\u00045BZ*s\u0006\r\u0010#BY\u0017g\t\u001c-AL\u0002{\u0005\f1C77^Dj~\\\u001c1RAjq\u0004\u0006'^E!<\u001b\t:TE7<9\r9^_!W\u0007\r9TG0B\u0019\u0007$T[0{\u000e\u001b\u0010XH(}\f6\u0015UMd}\u0019H&TD+d\u000eH;_Ld}\u0019H9^[!23%\u0018\u0011L(w\u0006\r:EZdt\u0019\u00079\u0011Hd\u007f\u000e\u001b'PN!<\u001c\u0015UMd}\u0019H\u0006TD+d\u000eH\f|edW\u0007\r9TG0:\u0018A\u0003,\\E\u0014$CF4w\u0019\u001c=TZ\u0005q\u001f\u0001;_g%\u007f\u000e\u000b0TZ'`\u0002\u0018 XF*\t'YF6f%\t9T";
      int var4 = "5D]+\u0015$^E-q\u0012&;UL\ns\u0006\r\u0012PJ0}\u0019\u0011\u0017=_Z!`\u001f\r0tE!\u007f\u000e\u0006 }F's\u001f\u0001;_\u0014z\\L0s\u000f\t P`*{\u001f\u00015]@>w\u000f\u0015\u0006TD+d\u000eH\f|edW\u0007\r9TG0:\u0018A\u001c\u0015UMd}\u0019H\u0006TD+d\u000eH\f|edW\u0007\r9TG0:\u0018A\u0019$CF4w\u0019\u001c=TZ\u0001v\u0002\u001c;Cj(s\u0018\u001b:PD!\u0002pJ\u0012\u0015UMdJ&$ttE!\u007f\u000e\u0006 \u0019Zm\u0015$^E-q\u0012)0G@'w(\u00045BZ*s\u0006\r\u0010#BY\u0017g\t\u001c-AL\u0002{\u0005\f1C77^Dj~\\\u001c1RAjq\u0004\u0006'^E!<\u001b\t:TE7<9\r9^_!W\u0007\r9TG0B\u0019\u0007$T[0{\u000e\u001b\u0010XH(}\f6\u0015UMd}\u0019H&TD+d\u000eH;_Ld}\u0019H9^[!23%\u0018\u0011L(w\u0006\r:EZdt\u0019\u00079\u0011Hd\u007f\u000e\u001b'PN!<\u001c\u0015UMd}\u0019H\u0006TD+d\u000eH\f|edW\u0007\r9TG0:\u0018A\u0003,\\E\u0014$CF4w\u0019\u001c=TZ\u0005q\u001f\u0001;_g%\u007f\u000e\u000b0TZ'`\u0002\u0018 XF*\t'YF6f%\t9T"
         .length();
      char var1 = 4;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 47;
         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;
                     String[] var9 = b;
                     baseNameRemove = b[4];
                     baseNameInsert = var9[8];
                     baseName = var9[13];
                     META_INITIALIZED = RemoveElement.class.getName() + b[3];
                     policyNameFactory = new a();
                     return;
                  }

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

                  var2 = "&f~WN*{5gw\u0018W={?OVWd4>\ngt\u0003Rx\u000b\u0015mj\u0012S,2\u0002q\u000e\u0017cv\u0012U,>!mv\u0013D*(";
                  var4 = "&f~WN*{5gw\u0018W={?OVWd4>\ngt\u0003Rx\u000b\u0015mj\u0012S,2\u0002q\u000e\u0017cv\u0012U,>!mv\u0013D*(".length();
                  var1 = '%';
                  var7 = -1;
            }

            var10000 = 28;
            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] ^ 71);
      }

      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 -> 123;
            case 1 -> 30;
            case 2 -> 6;
            case 3 -> 107;
            case 4 -> 61;
            case 5 -> 68;
            default -> 71;
         });
      }

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

   public enum ElementLocation {
      FIRST_CHILD,
      LAST_CHILD,
      PREVIOUS_SIBLING,
      NEXT_SIBLING;

      private final String text;

      ElementLocation(String var3) {
         this.text = var3;
      }

      public String getText() {
         return this.text;
      }

      @Override
      public String toString() {
         return this.text;
      }

      // $VF: Failed to inline enum fields
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      static {
         String[] var0 = new String[8];
         int var4 = 0;
         String var3 = "c\f:r\u0010\u00138f\u0001-\u000bi$\u001bU;p3G$\u0005B\u0010\u007f\u001f,p\u0006\u001f%|\u0012:o\r\u001c9a\n\u0010\u007f?\fP&?\u0005\\m:O-<\u0019A*\nc,\u001aRo\u0013\u0018F!\r\fa\b1r\u0010\u00039m\u0001 h\b";
         int var5 = "c\f:r\u0010\u00138f\u0001-\u000bi$\u001bU;p3G$\u0005B\u0010\u007f\u001f,p\u0006\u001f%|\u0012:o\r\u001c9a\n\u0010\u007f?\fP&?\u0005\\m:O-<\u0019A*\nc,\u001aRo\u0013\u0018F!\r\fa\b1r\u0010\u00039m\u0001 h\b"
            .length();
         char var2 = '\n';
         int var7 = -1;

         label25:
         while (true) {
            byte var10000 = 87;
            String var10001 = var3.substring(++var7, var7 + var2);
            byte var10002 = -1;

            while (true) {
               String var8 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var0[var4++] = var8;
                     if ((var7 += var2) >= var5) {
                        FIRST_CHILD = new RemoveElement.ElementLocation(var0[1]);
                        LAST_CHILD = new RemoveElement.ElementLocation(var0[4]);
                        PREVIOUS_SIBLING = new RemoveElement.ElementLocation(var0[3]);
                        NEXT_SIBLING = new RemoveElement.ElementLocation(var0[6]);
                        return;
                     }

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

                     var3 = "^\u0017.mP<&r\u001e?w\u0017\u000bV;\u0004J$0\fX;\u001a]";
                     var5 = "^\u0017.mP<&r\u001e?w\u0017\u000bV;\u0004J$0\fX;\u001a]".length();
                     var2 = '\f';
                     var7 = -1;
               }

               var10000 = 104;
               var10001 = var3.substring(++var7, var7 + var2);
               var10002 = 0;
            }
         }
      }

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

         return var10000;
      }

      private static String a(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 -> 120;
               case 1 -> 26;
               case 2 -> 62;
               case 3 -> 113;
               case 4 -> 24;
               case 5 -> 7;
               default -> 39;
            });
         }

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