package com.l7tech.gateway.common.service;

import com.l7tech.common.io.DocumentReferenceProcessor;
import com.l7tech.util.HexUtils;
import com.l7tech.util.IOUtils;
import com.l7tech.util.ResourceUtils;
import com.l7tech.wsdl.ResourceTrackingWSDLLocator;
import com.l7tech.wsdl.SerializableWSDLLocator;
import com.l7tech.wsdl.Wsdl;
import com.l7tech.wsdl.WsdlEntityResolver;
import com.l7tech.wsdl.ResourceTrackingWSDLLocator.WSDLResource;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.wsdl.WSDLException;
import org.jetbrains.annotations.NotNull;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class ServiceDocumentWsdlStrategy implements PublishedService.WsdlStrategy {
   private static final Logger a;
   private final Collection<ServiceDocument> b;
   private static final String[] c;

   public ServiceDocumentWsdlStrategy(Collection<ServiceDocument> var1) {
      this.b = var1 == null ? Collections.emptyList() : new ArrayList<>(var1);
   }

   @Override
   public final Wsdl parseWsdl(PublishedService var1, String var2, String var3) throws WSDLException {
      return Wsdl.newInstance(this.wsdlLocator(var1, var2, var3));
   }

   @Override
   public SerializableWSDLLocator wsdlLocator(PublishedService var1, String var2, String var3) throws WSDLException {
      return Wsdl.getWSDLLocator(var2, this.a(var2, var3, var1), this.getLogger());
   }

   public static Wsdl parseWsdl(PublishedService var0, Collection<ServiceDocument> var1) throws WSDLException {
      return parseWsdl(var0.getWsdlUrl(), var0.getWsdlXml(), var1);
   }

   public static Wsdl parseWsdl(String var0, String var1, Collection<ServiceDocument> var2) throws WSDLException {
      return new ServiceDocumentWsdlStrategy(var2).parseWsdl(null, var0, var1);
   }

   public static List<ServiceDocument> fromWsdlResources(Collection<WSDLResource> var0) {
      ArrayList var1 = new ArrayList();

      for (WSDLResource var3 : var0) {
         ServiceDocument var4 = new ServiceDocument();
         var4.setUri(var3.getUri());
         String[] var5 = c;
         var4.setType(var5[9]);
         var4.setContents(var3.getWsdl());
         var4.setContentType(var5[13]);
         var1.add(var4);
      }

      return var1;
   }

   @NotNull
   public static ServiceDocumentWsdlStrategy.ServiceDocumentResources loadResources(
      @NotNull String var0, @NotNull String var1, @NotNull String var2, @NotNull ClassLoader var3
   ) throws IOException, URISyntaxException {
      try {
         if (var0 == null) {
            a(0);
         }
      } catch (IOException var10) {
         throw a(var10);
      }

      try {
         if (var1 == null) {
            a(1);
         }
      } catch (IOException var12) {
         throw a(var12);
      }

      try {
         if (var2 == null) {
            a(2);
         }
      } catch (IOException var9) {
         throw a(var9);
      }

      try {
         if (var3 == null) {
            a(3);
         }
      } catch (IOException var11) {
         throw a(var11);
      }

      String var4 = new URI(var1).resolve(new URI(var2)).toString();
      WsdlEntityResolver var5 = new WsdlEntityResolver(true);
      DocumentReferenceProcessor var6 = new DocumentReferenceProcessor();
      Map var7 = var6.processDocument(var4, new f(var1, var3, var0, var5));
      Collection var8 = ResourceTrackingWSDLLocator.toWSDLResources(var4, var7, false, false, false);
      return new ServiceDocumentWsdlStrategy.ServiceDocumentResources(var4, (String)var7.get(var4), fromWsdlResources(var8));
   }

   protected Collection<ServiceDocument> loadServiceDocuments(PublishedService var1) throws WSDLException {
      return this.b;
   }

   protected Logger getLogger() {
      return a;
   }

   private Map<String, String> a(String var1, String var2, PublishedService var3) throws WSDLException {
      HashMap var4 = new HashMap();

      for (ServiceDocument var6 : this.loadServiceDocuments(var3)) {
         var4.put(var6.getUri(), var6.getContents());
      }

      var4.put(var1, var2);
      return var4;
   }

   private static String a(ClassLoader var0, String var1, String var2, EntityResolver var3) throws IOException {
      byte[] var4 = null;
      InputSource var5 = null;

      try {
         var5 = var3.resolveEntity(null, var2);
         if (var5 != null) {
            var4 = IOUtils.slurpStream(var5.getByteStream());
         }
      } catch (SAXException var16) {
         String[] var10 = c;
         throw new IOException(var10[7] + var2 + var10[2], var16);
      } finally {
         try {
            if (var5 != null) {
               ResourceUtils.closeQuietly(var5.getByteStream());
            }
         } catch (SAXException var17) {
            throw a(var17);
         }
      }

      if (var4 == null) {
         String var6 = var2;
         int var7 = var2.lastIndexOf(47);
         if (var7 > 0) {
            var6 = var2.substring(var7 + 1);
         }

         String[] var20 = c;
         a.fine(var20[12] + var2 + var20[6] + var6 + var20[8]);
         String var8 = var1 + var6;
         URL var9 = var0.getResource(var8);

         try {
            if (var9 == null) {
               throw new IOException(var20[11] + var8 + "'");
            }
         } catch (SAXException var19) {
            throw a(var19);
         }

         var4 = IOUtils.slurpUrl(var9);
      }

      return HexUtils.decodeUtf8(var4);
   }

   static {
      String[] var5 = new String[15];
      int var3 = 0;
      String var2 = "o\u0004oq\u001e0`x#}m\u000e=~\u000eq1\u0007uwx\u0002t1\f#wx\u0016}gD!lp\fspD1fo\u0017u}\u000emPx\u0013jw\b'Gr\u0002is\u000e,wJ\u0012xr86q|\u0015yy\u0012\u0002:O\rn\u0015}l\u001f\u0006l~\u0014q{\u00056>\\\u0013{k\u0006'miAzq\u0019bCS\u000ehP\u001e.o=\u0011}l\n/fi\u0004n>Lgp:AsxKgp3Do>\u00067piArq\u001fbaxArk\u0007.\u0007h\u0013p\\\n1f\u0006:A}mKe\u0016^\u0000rp\u00046#q\u000e}zK0fn\u000eil\b'#:\u0002:O\u000bJ2XRF\u000bNM.NJ\rq\u000e}z9'pr\u0014n}\u000e1\u0012P\bom\u0002,d=\u0013ym\u00047q~\u0004<9\u0017Q\u000e}z\u0002,d=6OZ'bqx\u0012sk\u0019!f=F";
      int var4 = "o\u0004oq\u001e0`x#}m\u000e=~\u000eq1\u0007uwx\u0002t1\f#wx\u0016}gD!lp\fspD1fo\u0017u}\u000emPx\u0013jw\b'Gr\u0002is\u000e,wJ\u0012xr86q|\u0015yy\u0012\u0002:O\rn\u0015}l\u001f\u0006l~\u0014q{\u00056>\\\u0013{k\u0006'miAzq\u0019bCS\u000ehP\u001e.o=\u0011}l\n/fi\u0004n>Lgp:AsxKgp3Do>\u00067piArq\u001fbaxArk\u0007.\u0007h\u0013p\\\n1f\u0006:A}mKe\u0016^\u0000rp\u00046#q\u000e}zK0fn\u000eil\b'#:\u0002:O\u000bJ2XRF\u000bNM.NJ\rq\u000e}z9'pr\u0014n}\u000e1\u0012P\bom\u0002,d=\u0013ym\u00047q~\u0004<9\u0017Q\u000e}z\u0002,d=6OZ'bqx\u0012sk\u0019!f=F"
         .length();
      char var1 = '\f';
      int var7 = -1;

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

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

                  var2 = "Z7WYw\t]B\u000bM>N^+=_O6J_";
                  var4 = "Z7WYw\t]B\u000bM>N^+=_O6J_".length();
                  var1 = '\b';
                  var7 = -1;
            }

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

      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 -> 9;
            case 1 -> 117;
            case 2 -> 8;
            case 3 -> 10;
            case 4 -> 127;
            case 5 -> 86;
            default -> 23;
         });
      }

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

   public static final class ServiceDocumentResources {
      private final String a;
      private final String b;
      private final List<ServiceDocument> c;
      private static final String[] d;

      public ServiceDocumentResources(@NotNull String var1, @NotNull String var2, @NotNull List<ServiceDocument> var3) {
         if (var1 == null) {
            a(0);
         }

         if (var2 == null) {
            a(1);
         }

         if (var3 == null) {
            a(2);
         }

         super();
         this.a = var1;
         this.b = var2;
         this.c = var3;
      }

      @NotNull
      public String getUri() {
         try {
            if (this.a == null) {
               a(3);
            }

            return this.a;
         } catch (IllegalArgumentException var1) {
            throw a(var1);
         }
      }

      @NotNull
      public String getContent() {
         try {
            if (this.b == null) {
               a(4);
            }

            return this.b;
         } catch (IllegalArgumentException var1) {
            throw a(var1);
         }
      }

      @NotNull
      public List<ServiceDocument> getDependencies() {
         try {
            if (this.c == null) {
               a(5);
            }

            return this.c;
         } catch (IllegalArgumentException var1) {
            throw a(var1);
         }
      }

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

      static {
         String[] var5 = new String[11];
         int var3 = 0;
         String var2 = "\"\u001a+>ZYz$\u0016.>Q\u000fz$\u0002'h\u0019\ra,\u0018)\u007f\u0019\u001dk3\u0003/rSA]$\u00070xU\u000bJ.\u00163|S\u0000z\u0016\u0006\"}e\u001a| \u0001#vOJ]$\u00070xU\u000bJ.\u00163|S\u0000z\u0013\u00105~C\u001cm$\u0006\u0007\"\u001a(eS\u0000z\u000f&\u00102US\u001ek/\u0011#\u007fU\u0007k2\u0006&\u00102DD\u0007>\u0000\u0007!d[\u000b`5U ~DNN\u000f\u001a2_C\u0002ba\u0005'cW\u0003k5\u001041\u0011K}fU)w\u0016K}oP51[\u001b}5U(~BNl$U(dZ\u0002\u00034\u0007/V\"\u001a+>ZYz$\u0016.>Q\u000fz$\u0002'h\u0019\ra,\u0018)\u007f\u0019\u001dk3\u0003/rSA]$\u00070xU\u000bJ.\u00163|S\u0000z\u0016\u0006\"}e\u001a| \u0001#vOJ]$\u00070xU\u000bJ.\u00163|S\u0000z\u0013\u00105~C\u001cm$\u0006\u0006}\u001c(xBP*\u0001;)ex\u001bb-U+tB\u0006a%Ucb\u0018K}a\u00183bBN`.\u0001fcS\u001a{3\u001bf\u007fC\u0002b";
         int var4 = "\"\u001a+>ZYz$\u0016.>Q\u000fz$\u0002'h\u0019\ra,\u0018)\u007f\u0019\u001dk3\u0003/rSA]$\u00070xU\u000bJ.\u00163|S\u0000z\u0016\u0006\"}e\u001a| \u0001#vOJ]$\u00070xU\u000bJ.\u00163|S\u0000z\u0013\u00105~C\u001cm$\u0006\u0007\"\u001a(eS\u0000z\u000f&\u00102US\u001ek/\u0011#\u007fU\u0007k2\u0006&\u00102DD\u0007>\u0000\u0007!d[\u000b`5U ~DNN\u000f\u001a2_C\u0002ba\u0005'cW\u0003k5\u001041\u0011K}fU)w\u0016K}oP51[\u001b}5U(~BNl$U(dZ\u0002\u00034\u0007/V\"\u001a+>ZYz$\u0016.>Q\u000fz$\u0002'h\u0019\ra,\u0018)\u007f\u0019\u001dk3\u0003/rSA]$\u00070xU\u000bJ.\u00163|S\u0000z\u0016\u0006\"}e\u001a| \u0001#vOJ]$\u00070xU\u000bJ.\u00163|S\u0000z\u0013\u00105~C\u001cm$\u0006\u0006}\u001c(xBP*\u0001;)ex\u001bb-U+tB\u0006a%Ucb\u0018K}a\u00183bBN`.\u0001fcS\u001a{3\u001bf\u007fC\u0002b"
            .length();
         char var1 = 'V';
         int var7 = -1;

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

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

                     var2 = "^kM\u000f#q\u0010TmT\u000f>\n]kI)\"{\u0001_`I";
                     var4 = "^kM\u000f#q\u0010TmT\u000f>\n]kI)\"{\u0001_`I".length();
                     var1 = '\f';
                     var7 = -1;
               }

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

         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 -> 38;
               case 1 -> 18;
               case 2 -> 33;
               case 3 -> 118;
               case 4 -> 81;
               case 5 -> 9;
               default -> 105;
            });
         }

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