package com.l7tech.policy.assertion;

import com.l7tech.objectmodel.ExternalEntityHeader;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.policy.assertion.annotation.RequiresXML;
import com.l7tech.policy.variable.Syntax;
import com.l7tech.xml.NamespaceMigratable;
import com.l7tech.xml.soap.SoapVersion;
import com.l7tech.xml.xpath.XpathExpression;
import com.l7tech.xml.xpath.XpathUtil;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import org.jetbrains.annotations.Nullable;

@RequiresXML
public abstract class XpathBasedAssertion extends Assertion implements UsesVariables, NamespaceMigratable {
   protected XpathExpression xpathExpression;
   static final long serialVersionUID = -4526319106049693546L;
   private static final String[] b;

   protected XpathBasedAssertion() {
   }

   public XpathExpression getXpathExpression() {
      return this.xpathExpression;
   }

   public void setXpathExpression(@Nullable XpathExpression var1) {
      this.xpathExpression = var1;
   }

   @Migration(
      mapName = MigrationMappingSelection.NONE,
      mapValue = MigrationMappingSelection.REQUIRED,
      export = false,
      valueType = ExternalEntityHeader.ValueType.TEXT_ARRAY,
      resolver = PropertyResolver.Type.SERVER_VARIABLE
   )
   @Override
   public final String[] getVariablesUsed() {
      return this.doGetVariablesUsed().asArray();
   }

   @Override
   public String toString() {
      XpathExpression var1 = this.getXpathExpression();
      StringBuffer var2 = new StringBuffer(super.toString());
      if (var1 != null && var1.getExpression() != null) {
         String var10001 = var1.getExpression();
         String[] var3 = b;
         var2.append(var3[1] + var10001);
      }

      if (var1 != null && var1.getNamespaces() != null) {
         var2.append(b[3] + var1.getNamespaces());
      }

      return var2.toString();
   }

   public String pattern() {
      return this.getXpathExpression() != null ? this.getXpathExpression().getExpression() : null;
   }

   public Map<String, String> namespaceMap() {
      return this.getXpathExpression() != null ? this.getXpathExpression().getNamespaces() : null;
   }

   public XpathExpression createDefaultXpathExpression(boolean var1, SoapVersion var2) {
      String var10000;
      if (SoapVersion.SOAP_1_2.equals(var2)) {
         String[] var4 = b;
         var10000 = var4[6];
      } else {
         String[] var5 = b;
         var10000 = var5[4];
      }

      String var3 = var10000;
      return new XpathExpression(b[5], "s", var3);
   }

   public static XpathExpression compatOrigDefaultXpathValue() {
      String[] var0 = b;
      return new XpathExpression(var0[0], var0[7], var0[2]);
   }

   @Override
   public void migrateNamespaces(Map<String, String> var1) {
      XpathExpression var2 = this.getXpathExpression();
      if (var2 != null) {
         var2.migrateNamespaces(var1);
      }
   }

   @Override
   public Set<String> findNamespaceUrisUsed() {
      XpathExpression var1 = this.getXpathExpression();
      return var1 == null ? Collections.emptySet() : var1.findNamespaceUrisUsed();
   }

   public boolean permitsFullyDynamicExpression() {
      return false;
   }

   public static boolean isFullyDynamicXpath(String var0) {
      return var0 != null && Syntax.getSingleVariableReferenced(var0) != null;
   }

   protected XpathBasedAssertion.VariablesUsed doGetVariablesUsed() {
      XpathBasedAssertion.VariablesUsed var1 = new XpathBasedAssertion.VariablesUsed();
      if (this.xpathExpression != null) {
         String var2 = this.xpathExpression.getExpression();
         String var3 = !this.permitsFullyDynamicExpression() ? null : Syntax.getSingleVariableReferenced(var2);
         if (var3 != null) {
            var1.addVariables(var3);
         } else if (var2 != null) {
            var1.addVariables(XpathUtil.getUnprefixedVariablesUsedInXpath(var2, this.xpathExpression.getXpathVersion()));
         }
      }

      return var1;
   }

   static {
      String[] var5 = new String[8];
      int var3 = 0;
      String var2 = "\u0007Gz\u0004--J^\u000eP\u000b+-HGDpJ.'EXQ{\u0013g\nKLM\t\bDt\u0011)-VF\t)@@a\u0015gg\u000b[W}\u00000)W\u0006Lx\t.'EX\u001az\u0017:gWGUeJ8&RMXz\u00158g\u000f\bZt\b8;TIWp\u00160)T\u0015)@@a\u0015gg\u000b[W}\u00000)W\u0006Lx\t.'EX\u001az\u0017:gWGUeJ8&RMXz\u00158g\u0012\u0007G/ 3>AD[e\u0000r;\u001ej[q\u001c";
      int var4 = "\u0007Gz\u0004--J^\u000eP\u000b+-HGDpJ.'EXQ{\u0013g\nKLM\t\bDt\u0011)-VF\t)@@a\u0015gg\u000b[W}\u00000)W\u0006Lx\t.'EX\u001az\u0017:gWGUeJ8&RMXz\u00158g\u000f\bZt\b8;TIWp\u00160)T\u0015)@@a\u0015gg\u000b[W}\u00000)W\u0006Lx\t.'EX\u001az\u0017:gWGUeJ8&RMXz\u00158g\u0012\u0007G/ 3>AD[e\u0000r;\u001ej[q\u001c"
         .length();
      char var1 = 30;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 42;
         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;
                     return;
                  }

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

                  var2 = "ddE1CC/{gFo\u000e_.cbVnK\\0??\u0001tV\u001fom`\u001c$\u0017\u001ae`\u007fA$\u0007\u007f\u007fP1\u001c\u0002v";
                  var4 = "ddE1CC/{gFo\u000e_.cbVnK\\0??\u0001tV\u001fom`\u001c$\u0017\u001ae`\u007fA$\u0007\u007f\u007fP1\u001c\u0002v".length();
                  var1 = '\'';
                  var7 = -1;
            }

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

      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 -> 2;
            case 1 -> 30;
            case 2 -> 63;
            case 3 -> 79;
            case 4 -> 119;
            case 5 -> 98;
            default -> 14;
         });
      }

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

   protected final class VariablesUsed extends VariableUseSupport.VariablesUsedSupport<XpathBasedAssertion.VariablesUsed> {
      private VariablesUsed() {
      }

      protected XpathBasedAssertion.VariablesUsed get() {
         return this;
      }
   }
}
