package com.l7tech.server.service.resolution;

import com.l7tech.common.io.DocumentReferenceProcessor;
import com.l7tech.common.io.XmlUtil;
import com.l7tech.util.Resolver;
import com.l7tech.wsdl.Wsdl;
import com.l7tech.xml.soap.SoapUtil.SchemaTypeResolver;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.wsdl.Types;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.UnknownExtensibilityElement;
import javax.wsdl.extensions.schema.Schema;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

class k implements SchemaTypeResolver {
   private static final QName a;
   private final Wsdl b;
   private final Resolver<String, String> c;
   private final Map<QName, Collection<QName>> d = new HashMap<>();
   private final Map<String, Element> e = new HashMap<>();
   private static final String[] g;

   public Collection<QName> resolveType(QName var1) {
      Collection var2 = this.d.get(var1);
      if (var2 != null) {
         return var2;
      }

      String var3 = var1.getNamespaceURI();
      Collection var4 = this.b.getTypes();
      Element var5 = null;

      for (Types var7 : var4) {
         var5 = this.a(var3, var1.getLocalPart(), var7);
         if (var5 != null) {
            break;
         }
      }

      if (var5 != null) {
         String[] var9 = g;
         Element var10 = XmlUtil.findFirstChildElementByName(var5, var9[4], var9[8]);
         if (var10 != null) {
            Element var11 = XmlUtil.findFirstChildElementByName(var10, var9[4], var9[2]);
            if (var11 != null && XmlUtil.findNextElementSibling(var11) == null) {
               Collection var8 = this.a(var4, new HashSet<>());
               if ("0".equals(var11.getAttribute(var9[10]))) {
                  var8.add(null);
               }

               var2 = var8;
            }
         }
      }

      if (var2 == null) {
         var2 = Collections.singleton(new QName(null, var1.getLocalPart()));
      }

      this.d.put(var1, var2);
      return var2;
   }

   k(Wsdl var1) {
      this(var1, null);
   }

   k(Wsdl var1, Resolver<String, String> var2) {
      this.b = var1;
      this.c = var2;
   }

   String resolveSchema(String var1) {
      return this.c == null ? null : (String)this.c.resolve(var1);
   }

   private Collection<QName> a(Collection<Types> var1, HashSet<Element> var2) {
      ArrayList var3 = new ArrayList();

      for (Types var5 : var1) {
         this.a(var3, var5, var2);
      }

      return var3;
   }

   private void a(Collection<QName> var1, Types var2, HashSet<Element> var3) {
      for (ExtensibilityElement var5 : var2.getExtensibilityElements()) {
         if (a.equals(var5.getElementType())) {
            Element var6 = null;
            if (var5 instanceof Schema) {
               var6 = ((Schema)var5).getElement();
            } else if (var5 instanceof UnknownExtensibilityElement) {
               var6 = ((UnknownExtensibilityElement)var5).getElement();
            }

            if (var6 != null) {
               this.a(var1, var6, var3);
            }
         }
      }
   }

   private void a(Collection<QName> var1, Element var2, HashSet<Element> var3) {
      if (!var3.contains(var2)) {
         var3.add(var2);
         String[] var8 = g;
         String var4 = var2.getAttribute(var8[7]);
         if (var4.isEmpty()) {
            var4 = null;
         }

         var8 = g;

         for (Element var6 : XmlUtil.findChildElementsByName(var2, var8[4], var8[3])) {
            var1.add(new QName(var4, var6.getAttribute(g[9])));
         }

         for (Element var7 : this.a(var2)) {
            this.a(var1, var7, var3);
         }
      }
   }

   private Element a(String var1, String var2, Types var3) {
      Element var4 = null;

      for (ExtensibilityElement var6 : var3.getExtensibilityElements()) {
         if (a.equals(var6.getElementType())) {
            Element var7 = null;
            if (var6 instanceof Schema) {
               var7 = ((Schema)var6).getElement();
            } else if (var6 instanceof UnknownExtensibilityElement) {
               var7 = ((UnknownExtensibilityElement)var6).getElement();
            }

            if (var7 != null) {
               var4 = this.a(var1, var2, var7, new HashSet<>());
               if (var4 != null) {
                  break;
               }
            }
         }
      }

      return var4;
   }

   private Element a(String var1, String var2, Element var3, Set<Element> var4) {
      Element var5 = null;
      if (var4.contains(var3)) {
         return null;
      }

      var4.add(var3);
      String[] var9 = g;
      if (var1.equals(var3.getAttribute(var9[5]))) {
         for (Element var7 : XmlUtil.findChildElementsByName(var3, var9[0], var9[6])) {
            if (var2.equals(var7.getAttribute(g[11]))) {
               var5 = var7;
               break;
            }
         }
      } else {
         for (Element var8 : this.a(var3)) {
            var5 = this.a(var1, var2, var8, var4);
            if (var5 != null) {
               break;
            }
         }
      }

      return var5;
   }

   private Collection<Element> a(Element var1) {
      ArrayList var2 = new ArrayList();
      DocumentReferenceProcessor var3 = new DocumentReferenceProcessor();
      var3.processDocumentReferences(var1.getOwnerDocument().getDocumentURI(), var1, new m(this, var2));
      return var2;
   }

   private Element a(String var1, String var2) throws IOException, SAXException {
      Element var3 = this.e.get(var1);
      if (var3 == null) {
         InputSource var4 = new InputSource(var1);
         var4.setCharacterStream(new StringReader(var2));
         var3 = XmlUtil.parse(var4, false).getDocumentElement();
         this.e.put(var1, var3);
      }

      return var3;
   }

   static {
      String[] var5 = new String[12];
      int var3 = 0;
      String var2 = "\ni7 }\u000f^\u0015j4~0\u0013_\ro$\u007fu\u0010AS2\u001b\u001d\u000bs\u0012\nx.1\u0006\u0011~+5*A\u0003\u0003s:\u0007\u0007q&=\"N\u0005 \ni7 }\u000f^\u0015j4~0\u0013_\ro$\u007fu\u0010AS2\u001b\u001d\u000bs\u0012\nx.1\u000f\u0016|17\"T?\u0003p&#7A\u0012\u0007\u000b\u0001r. +E\t6d35\u000f\u0016|17\"T?\u0003p&#7A\u0012\u0007\b\u0011x2%\"N\u0012\u0007\u0004\f|.5";
      int var4 = "\ni7 }\u000f^\u0015j4~0\u0013_\ro$\u007fu\u0010AS2\u001b\u001d\u000bs\u0012\nx.1\u0006\u0011~+5*A\u0003\u0003s:\u0007\u0007q&=\"N\u0005 \ni7 }\u000f^\u0015j4~0\u0013_\ro$\u007fu\u0010AS2\u001b\u001d\u000bs\u0012\nx.1\u000f\u0016|17\"T?\u0003p&#7A\u0012\u0007\u000b\u0001r. +E\t6d35\u000f\u0016|17\"T?\u0003p&#7A\u0012\u0007\b\u0011x2%\"N\u0012\u0007\u0004\f|.5"
         .length();
      char var1 = ' ';
      int var7 = -1;

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

         while (true) {
            String var9 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var7 += var1) >= var4) {
                     g = var5;
                     String[] var8 = g;
                     a = new QName(var8[4], var8[1]);
                     return;
                  }

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

                  var2 = "\fw.\u001c'@\u0007\u0013m\u0004\u000f\u007f-6";
                  var4 = "\fw.\u001c'@\u0007\u0013m\u0004\u000f\u007f-6".length();
                  var1 = '\t';
                  var7 = -1;
            }

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

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

      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 -> 48;
            case 1 -> 79;
            case 2 -> 17;
            case 3 -> 2;
            case 4 -> 21;
            case 5 -> 114;
            default -> 35;
         });
      }

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