package com.l7tech.policy.wsp;

import com.l7tech.common.io.XmlUtil;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.util.DomUtils;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.TooManyChildElementsException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;

public class WspReader {
   public static final WspReader.Visibility INCLUDE_DISABLED;
   public static final WspReader.Visibility OMIT_DISABLED;
   private final WspVisitor a;
   private final WspVisitor b;
   private static final String[] c;

   public WspReader(TypeMappingFinder var1) {
      this.a = new PermissiveWspVisitor(var1);
      this.b = new u(var1);
   }

   public static WspReader getDefault() {
      return new WspReader(WspConstants.getTypeMappingFinder());
   }

   public static Element findPolicyElement(Element var0) throws InvalidPolicyStreamException {
      try {
         if (c[10].equals(var0.getLocalName())) {
            return var0;
         }
      } catch (TooManyChildElementsException var4) {
         throw a(var4);
      }

      try {
         String[] var6 = c;
         Element var1 = DomUtils.findOnlyOneChildElementByName(var0, var6[6], var6[2]);
         if (var1 != null) {
            return var1;
         }

         var6 = c;
         var1 = DomUtils.findOnlyOneChildElementByName(var0, var6[4], var6[2]);
         if (var1 != null) {
            return var1;
         }
      } catch (TooManyChildElementsException var3) {
         String[] var2 = c;
         throw new InvalidPolicyStreamException(var2[5], var3);
      }

      throw new InvalidPolicyStreamException(c[0]);
   }

   public Assertion parsePermissively(Element var1, WspReader.Visibility var2) throws InvalidPolicyStreamException {
      return a(findPolicyElement(var1), this.a, var2);
   }

   static Assertion a(Element var0, WspVisitor var1, WspReader.Visibility var2) throws InvalidPolicyStreamException {
      List var3 = TypeMappingUtils.a((Node)var0);

      try {
         if (var3.isEmpty()) {
            return null;
         }
      } catch (InvalidPolicyStreamException var13) {
         throw a(var13);
      }

      try {
         if (var3.size() != 1) {
            throw new InvalidPolicyStreamException(c[8]);
         }
      } catch (InvalidPolicyStreamException var16) {
         throw a(var16);
      }

      WspWriter var4 = new WspWriter();
      WspWriter.a(var4);

      try {
         Object var5 = TypeMappingUtils.a((Element)var3.get(0), var1).target;

         try {
            if (!(var5 instanceof Assertion)) {
               throw new InvalidPolicyStreamException(c[9]);
            }
         } catch (InvalidPolicyStreamException var14) {
            throw a(var14);
         }

         Assertion var6 = (Assertion)var5;
         var6.treeChanged();
         if (WspReader.Visibility.omitDisabled.equals(var2)) {
            var6 = Assertion.filterOutDisabledAssertions(var6);
         }

         return var6;
      } finally {
         WspWriter.a((WspWriter)null);
      }
   }

   static Assertion a(InputStream var0, WspVisitor var1, WspReader.Visibility var2) throws IOException {
      return a(new InputSource(var0), var1, var2);
   }

   static Assertion a(InputSource var0, WspVisitor var1, WspReader.Visibility var2) throws IOException {
      try {
         Document var3 = XmlUtil.parse(var0, false);
         Element var4 = findPolicyElement(var3.getDocumentElement());

         try {
            if (!c[2].equals(var4.getLocalName())) {
               throw new InvalidPolicyStreamException(c[3]);
            }
         } catch (Exception var14) {
            throw a(var14);
         }

         String var5 = var4.getNamespaceURI();

         try {
            if (!WspConstants.a(var5)) {
               throw new InvalidPolicyStreamException(c[1]);
            }
         } catch (Exception var13) {
            throw a(var13);
         }

         WspWriter var6 = new WspWriter();
         WspWriter.a(var6);
         return a(var4, var1, var2);
      } catch (Exception var15) {
         throw new InvalidPolicyStreamException(c[7] + ExceptionUtils.getMessage(var15), var15);
      } finally {
         WspWriter.a((WspWriter)null);
      }
   }

   public Assertion parseStrictly(String var1, WspReader.Visibility var2) throws IOException {
      return a(var1, this.b, var2);
   }

   public Assertion parsePermissively(String var1, WspReader.Visibility var2) throws IOException {
      return a(var1.trim(), this.a, var2);
   }

   static Assertion a(String var0, WspVisitor var1, WspReader.Visibility var2) throws IOException {
      try {
         if (var0 == null) {
            throw new IllegalArgumentException(c[11]);
         }
      } catch (IOException var3) {
         throw a(var3);
      }

      return a(new InputSource(new StringReader(var0)), var1, var2);
   }

   static {
      String[] var5 = new String[12];
      int var3 = 0;
      String var2 = ";BG\u000bD\t{\u001aC\u0006\u0005G\u000f:\u001aI\u00069G\u00002\rU\u0006\fD\t6\u000bBR1*CE\u001cE\t5\u001a\fC\u0005M\u0001>\u0000X\u0006\u0000[L5\u0001X\u0006\u0000FL:N^C\nG\u000b5\u0007VC\r\b\u0002:\u0003IU\u0019I\u000f>\u0006>CJ\u0000K\u0015)*CE\u001cE\t5\u001a\fC\u0005M\u0001>\u0000X\u0006\u0005G\u000f:\u0002\fH\bE\t{\u0007_\u0006\u0007G\u0018{>CJ\u0000K\u0015#\u0006XR\u0019\u0012Ct\u0019[QGD\r\"\u000b^\u0011\u001dM\u000f3@OI\u0004\u0007\u001b(A\\I\u0005A\u000f\"\"#CT\f\b\u00183\u000fB\u0006\u0006F\t{>CJ\u0000K\u0015{\u000b@C\u0004M\u0002/NJI\u001cF\b,\u0006XR\u0019\u0012Ct\u001dON\fE\r(@TK\u0005[\u0003:\u001e\u0002I\u001bOC,\u001d\u0003\u0014Y\u0018^t_\u001e\t\u0019G\u00002\rU\u0018;BG\u000bD\t{\u001aC\u0006\u0019I\u001e(\u000b\fV\u0006D\u00058\u0017\u0016\u00068>CJ\u0000K\u0015{\nCC\u001a\b\u00024\u001a\fN\b^\t{\u000bTG\n\\\u0000\"NVC\u001bGL4\u001c\fI\u0007ML2\u0003AC\rA\r/\u000b\fE\u0001A\u0000?8>CJ\u0000K\u0015{\nCC\u001a\b\u00024\u001a\fN\b^\t{\u000fB\u0006\b[\u001f>\u001cXO\u0006FL:\u001d\fO\u001d[L2\u0003AC\rA\r/\u000b\fE\u0001A\u0000?";
      int var4 = ";BG\u000bD\t{\u001aC\u0006\u0005G\u000f:\u001aI\u00069G\u00002\rU\u0006\fD\t6\u000bBR1*CE\u001cE\t5\u001a\fC\u0005M\u0001>\u0000X\u0006\u0000[L5\u0001X\u0006\u0000FL:N^C\nG\u000b5\u0007VC\r\b\u0002:\u0003IU\u0019I\u000f>\u0006>CJ\u0000K\u0015)*CE\u001cE\t5\u001a\fC\u0005M\u0001>\u0000X\u0006\u0005G\u000f:\u0002\fH\bE\t{\u0007_\u0006\u0007G\u0018{>CJ\u0000K\u0015#\u0006XR\u0019\u0012Ct\u0019[QGD\r\"\u000b^\u0011\u001dM\u000f3@OI\u0004\u0007\u001b(A\\I\u0005A\u000f\"\"#CT\f\b\u00183\u000fB\u0006\u0006F\t{>CJ\u0000K\u0015{\u000b@C\u0004M\u0002/NJI\u001cF\b,\u0006XR\u0019\u0012Ct\u001dON\fE\r(@TK\u0005[\u0003:\u001e\u0002I\u001bOC,\u001d\u0003\u0014Y\u0018^t_\u001e\t\u0019G\u00002\rU\u0018;BG\u000bD\t{\u001aC\u0006\u0019I\u001e(\u000b\fV\u0006D\u00058\u0017\u0016\u00068>CJ\u0000K\u0015{\nCC\u001a\b\u00024\u001a\fN\b^\t{\u000bTG\n\\\u0000\"NVC\u001bGL4\u001c\fI\u0007ML2\u0003AC\rA\r/\u000b\fE\u0001A\u0000?8>CJ\u0000K\u0015{\nCC\u001a\b\u00024\u001a\fN\b^\t{\u000fB\u0006\b[\u001f>\u001cXO\u0006FL:\u001d\fO\u001d[L2\u0003AC\rA\r/\u000b\fE\u0001A\u0000?"
         .length();
      char var1 = 31;
      int var7 = -1;

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

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     c = var5;
                     INCLUDE_DISABLED = WspReader.Visibility.includeDisabled;
                     OMIT_DISABLED = WspReader.Visibility.omitDisabled;
                     return;
                  }

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

                  var2 = "] )c(v\u0016z<5R&c\u0018`.<*%`L-- *%zTa";
                  var4 = "] )c(v\u0016z<5R&c\u0018`.<*%`L-- *%zTa".length();
                  var1 = 6;
                  var7 = -1;
            }

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

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

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

      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 -> 125;
            case 1 -> 63;
            case 2 -> 53;
            case 3 -> 122;
            case 4 -> 59;
            case 5 -> 127;
            default -> 72;
         });
      }

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

   public enum Visibility {
      includeDisabled,
      omitDisabled;

      // $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[2];
         int var4 = 0;
         String var3 = "{! m\n4hV&0`\u001d<hv\f}\"*u;9~s-/d\u001b";
         int var5 = "{! m\n4hV&0`\u001d<hv\f}\"*u;9~s-/d\u001b".length();
         char var2 = 15;
         int var1 = -1;

         while (true) {
            String var10002 = a(40, a(var3.substring(++var1, var1 + var2)));
            byte var10001 = -1;
            var0[var4++] = var10002;
            if ((var1 += var2) >= var5) {
               includeDisabled = new WspReader.Visibility();
               omitDisabled = new WspReader.Visibility();
               return;
            }

            var2 = var3.charAt(var1);
         }
      }

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

         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 -> 58;
               case 1 -> 103;
               case 2 -> 107;
               case 3 -> 41;
               case 4 -> 87;
               case 5 -> 120;
               default -> 37;
            });
         }

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