package com.l7tech.xml.xpath;

import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.XmlSafe;
import com.l7tech.xml.NamespaceMigratable;
import java.io.Serializable;
import java.text.ParseException;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

@XmlSafe
public class XpathExpression extends CompilableXpath implements Serializable, NamespaceMigratable {
   private String expression;
   @NotNull
   private XpathVersion xpathVersion = XpathVersion.UNSPECIFIED;
   private Map<String, String> namespaces = new LinkedHashMap<>();
   private static final Logger logger;
   static final long serialVersionUID = -8662805124645551939L;
   private static final String[] b;

   @XmlSafe
   public XpathExpression() {
   }

   @XmlSafe
   public XpathExpression(String var1) {
      this(var1, null);
   }

   @XmlSafe
   public XpathExpression(String var1, String var2, String var3) {
      this(var1, makeMap(var2, var3));
   }

   @XmlSafe
   public XpathExpression(String var1, @Nullable Map<String, String> var2) {
      this(var1, XpathVersion.UNSPECIFIED, var2);
   }

   @XmlSafe
   public XpathExpression(String var1, @NotNull XpathVersion var2, @Nullable Map<String, String> var3) {
      this.expression = var1;
      if (var3 != null) {
         this.namespaces.putAll(var3);
      }

      this.xpathVersion = var2;
   }

   @XmlSafe
   @Override
   public String getExpression() {
      return this.expression;
   }

   @XmlSafe
   @Override
   public Map<String, String> getNamespaces() {
      return this.namespaces;
   }

   @XmlSafe
   public void setExpression(String var1) {
      this.expression = var1;
   }

   @XmlSafe
   public void setNamespaces(Map<String, String> var1) {
      try {
         if (var1 != null) {
            this.namespaces.clear();
            this.namespaces.putAll(var1);
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }
   }

   @XmlSafe
   @NotNull
   @Override
   public XpathVersion getXpathVersion() {
      try {
         return this.xpathVersion;
      } catch (IllegalArgumentException var1) {
         throw a(var1);
      }
   }

   @XmlSafe
   public void setXpathVersion(@NotNull XpathVersion var1) {
      try {
         if (var1 == null) {
            $$$reportNull$$$0(2);
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      this.xpathVersion = var1;
   }

   @Override
   public boolean equals(Object param1) {
      // $VF: Couldn't be decompiled
      // 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!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: aload 1
      // 02: if_acmpne 0b
      // 05: bipush 1
      // 06: ireturn
      // 07: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0a: athrow
      // 0b: aload 1
      // 0c: instanceof com/l7tech/xml/xpath/XpathExpression
      // 0f: ifne 18
      // 12: bipush 0
      // 13: ireturn
      // 14: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 17: athrow
      // 18: aload 1
      // 19: checkcast com/l7tech/xml/xpath/XpathExpression
      // 1c: astore 2
      // 1d: aload 0
      // 1e: getfield com/l7tech/xml/xpath/XpathExpression.expression Ljava/lang/String;
      // 21: ifnull 40
      // 24: aload 0
      // 25: getfield com/l7tech/xml/xpath/XpathExpression.expression Ljava/lang/String;
      // 28: aload 2
      // 29: getfield com/l7tech/xml/xpath/XpathExpression.expression Ljava/lang/String;
      // 2c: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 2f: ifne 4d
      // 32: goto 39
      // 35: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 38: athrow
      // 39: goto 47
      // 3c: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3f: athrow
      // 40: aload 2
      // 41: getfield com/l7tech/xml/xpath/XpathExpression.expression Ljava/lang/String;
      // 44: ifnull 4d
      // 47: bipush 0
      // 48: ireturn
      // 49: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4c: athrow
      // 4d: aload 0
      // 4e: getfield com/l7tech/xml/xpath/XpathExpression.namespaces Ljava/util/Map;
      // 51: aload 2
      // 52: getfield com/l7tech/xml/xpath/XpathExpression.namespaces Ljava/util/Map;
      // 55: invokeinterface java/util/Map.equals (Ljava/lang/Object;)Z 2
      // 5a: ifne 63
      // 5d: bipush 0
      // 5e: ireturn
      // 5f: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 62: athrow
      // 63: aload 0
      // 64: getfield com/l7tech/xml/xpath/XpathExpression.xpathVersion Lcom/l7tech/xml/xpath/XpathVersion;
      // 67: aload 2
      // 68: getfield com/l7tech/xml/xpath/XpathExpression.xpathVersion Lcom/l7tech/xml/xpath/XpathVersion;
      // 6b: invokevirtual com/l7tech/xml/xpath/XpathVersion.equals (Ljava/lang/Object;)Z
      // 6e: ifne 77
      // 71: bipush 0
      // 72: ireturn
      // 73: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 76: athrow
      // 77: bipush 1
      // 78: ireturn
      // try (0 -> 5): 5 java/lang/IllegalArgumentException
      // try (7 -> 12): 12 java/lang/IllegalArgumentException
      // try (17 -> 26): 27 java/lang/IllegalArgumentException
      // try (20 -> 30): 30 java/lang/IllegalArgumentException
      // try (32 -> 37): 37 java/lang/IllegalArgumentException
      // try (39 -> 47): 47 java/lang/IllegalArgumentException
      // try (49 -> 57): 57 java/lang/IllegalArgumentException
   }

   @Override
   public int hashCode() {
      int var10000;
      label16: {
         try {
            if (this.expression != null) {
               var10000 = this.expression.hashCode();
               break label16;
            }
         } catch (IllegalArgumentException var2) {
            throw a(var2);
         }

         var10000 = 0;
      }

      int var1 = var10000;
      var1 = 29 * var1 + this.xpathVersion.hashCode();
      return 29 * var1 + this.namespaces.hashCode();
   }

   public static Map<String, String> makeMap(String param0, String param1) {
      // $VF: Couldn't be decompiled
      // 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!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 1
      // 01: ifnull 0f
      // 04: aload 0
      // 05: ifnonnull 15
      // 08: goto 0f
      // 0b: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0e: athrow
      // 0f: aconst_null
      // 10: areturn
      // 11: invokestatic com/l7tech/xml/xpath/XpathExpression.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 14: athrow
      // 15: new java/util/HashMap
      // 18: dup
      // 19: invokespecial java/util/HashMap.<init> ()V
      // 1c: astore 2
      // 1d: aload 2
      // 1e: aload 0
      // 1f: aload 1
      // 20: invokeinterface java/util/Map.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 3
      // 25: pop
      // 26: aload 2
      // 27: areturn
      // try (0 -> 4): 5 java/lang/IllegalArgumentException
      // try (2 -> 9): 9 java/lang/IllegalArgumentException
   }

   @Override
   public void migrateNamespaces(Map<String, String> var1) {
      Map var2 = this.getNamespaces();
      HashMap var3 = new HashMap();

      for (Entry var5 : var2.entrySet()) {
         String var6 = (String)var5.getValue();
         String var7 = (String)var1.get(var6);

         HashMap var10000;
         String var10001;
         String var10002;
         label23: {
            try {
               var10000 = var3;
               var10001 = (String)var5.getKey();
               if (var7 != null) {
                  var10002 = var7;
                  break label23;
               }
            } catch (IllegalArgumentException var8) {
               throw a(var8);
            }

            var10002 = var6;
         }

         var10000.put(var10001, var10002);
      }

      this.setNamespaces(var3);
   }

   @Override
   public Set<String> findNamespaceUrisUsed() {
      return this.findNameSpaceUrisUsed(true);
   }

   public Set<String> findNameSpaceUrisUsed(boolean var1) {
      String var2 = this.getExpression();

      try {
         if (var2 == null) {
            return Collections.emptySet();
         }
      } catch (ParseException var7) {
         throw a(var7);
      }

      try {
         Set var8 = XpathUtil.getNamespacePrefixesUsedByXpath(var2, this.xpathVersion, var1);
         HashMap var4 = new HashMap<>(this.namespaces);
         var4.keySet().retainAll(var8);
         return new HashSet<>(var4.values());
      } catch (ParseException var6) {
         ParseException var3 = var6;

         try {
            if (logger.isLoggable(Level.FINE)) {
               logger.log(Level.FINE, b[6] + ExceptionUtils.getMessage(var3), var3);
            }
         } catch (ParseException var5) {
            throw a(var5);
         }

         return Collections.emptySet();
      }
   }

   static {
      String[] var5 = new String[9];
      int var3 = 0;
      String var2 = "[i&!Z;\u001f]e#!Na\u0007\u0017~;oBdD`v*z^I\u0013Ht.}Ee\u0004V>yt,{[i\u0005L&-aD,+vi?@C`\u0007\u0018v*|Wa\u000eLc9.\u0011)\u0018\u001f&$h\u0016)\u0018\u0016#8.[y\u0018L&%aB,\t]&%{Z`\u0006\u0004o%gB2\f@v*z^Z\u000eJu\"aX*xH$zxy\u0007T&&kBd\u0004\\&n}\u0018)\u0018\u0018k>}B,\u0005Wrk|Sx\u001eJhk`C`\u0007$[i&!Z;\u001f]e#!Na\u0007\u0017~;oBdD`v*z^I\u0013Ht.}Ee\u0004V?mh*lZiKLik~W~\u0018]&\u0013^Wx\u0003\u0018c3~Di\u0018Ko$`\u0016x\u0004\u0018b.zS~\u0006Qh..Xm\u0006]u;oUi\u0018\u0018s8kR6K";
      int var4 = "[i&!Z;\u001f]e#!Na\u0007\u0017~;oBdD`v*z^I\u0013Ht.}Ee\u0004V>yt,{[i\u0005L&-aD,+vi?@C`\u0007\u0018v*|Wa\u000eLc9.\u0011)\u0018\u001f&$h\u0016)\u0018\u0016#8.[y\u0018L&%aB,\t]&%{Z`\u0006\u0004o%gB2\f@v*z^Z\u000eJu\"aX*xH$zxy\u0007T&&kBd\u0004\\&n}\u0018)\u0018\u0018k>}B,\u0005Wrk|Sx\u001eJhk`C`\u0007$[i&!Z;\u001f]e#!Na\u0007\u0017~;oBdD`v*z^I\u0013Ht.}Ee\u0004V?mh*lZiKLik~W~\u0018]&\u0013^Wx\u0003\u0018c3~Di\u0018Ko$`\u0016x\u0004\u0018b.zS~\u0006Qh..Xm\u0006]u;oUi\u0018\u0018s8kR6K"
         .length();
      char var1 = '$';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 41;
         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;
                     logger = Logger.getLogger(XpathExpression.class.getName());
                     return;
                  }

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

                  var2 = "2\u001aF/?\u0014f))W\u0005<\u001c}/\u000f&\u001aF/?\u0014f))W\u0005<\u001c}/";
                  var4 = "2\u001aF/?\u0014f))W\u0005<\u001c}/\u000f&\u001aF/?\u0014f))W\u0005<\u001c}/".length();
                  var1 = 15;
                  var7 = -1;
            }

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

   private static Exception a(Exception var0) {
      return var0;
   }

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

      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 -> 17;
            case 1 -> 47;
            case 2 -> 98;
            case 3 -> 39;
            case 4 -> 31;
            case 5 -> 37;
            default -> 66;
         });
      }

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