package com.l7tech.xml.xslt;

import com.l7tech.common.io.XmlUtil;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.ExceptionUtils;
import java.io.IOException;
import java.io.StringReader;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Templates;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import org.jetbrains.annotations.Nullable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class StylesheetCompiler {
   protected static final Logger logger;
   private static final String[] a;
   private static final String b;
   private static final String c;
   private static final String d;
   private static final String e;
   private static final String f;
   private static final String[] g;

   public static CompiledStylesheet compileStylesheet(String var0, @Nullable String var1) throws ParseException {
      if (var1 == null) {
         var1 = g[2];
      }

      Document var2 = a(var0);
      Templates var3 = a(var2, var1);
      return new CompiledStylesheet(var3, a(var3));
   }

   private static Templates a(Document var0, String var1) throws ParseException {
      try {
         TransformerFactory var2 = XsltUtil.createTransformerFactory(var1, true);
         Templates var3 = var2.newTemplates(new StreamSource(new StringReader(XmlUtil.nodeToString(var0))));

         try {
            if (var3 == null) {
               throw new ParseException(g[15], 0);
            }
         } catch (Exception var4) {
            throw a(var4);
         }

         return var3;
      } catch (Exception var5) {
         throw (ParseException)new ParseException(ExceptionUtils.getMessage(var5), 0).initCause(var5);
      }
   }

   private static Document a(String var0) throws ParseException {
      try {
         DocumentBuilderFactory var1 = DocumentBuilderFactory.newInstance();
         var1.setNamespaceAware(true);
         DocumentBuilder var2 = var1.newDocumentBuilder();
         var2.setEntityResolver(XmlUtil.getSafeEntityResolver());
         Document var3 = var2.parse(new InputSource(new StringReader(var0)));

         try {
            a(var3);
            if (!ConfigFactory.getBooleanProperty(g[7], false)) {
               b(var3);
            }
         } catch (IOException var4) {
            throw a(var4);
         }

         return var3;
      } catch (IOException var5) {
         throw (ParseException)new ParseException(ExceptionUtils.getMessage(var5), 0).initCause(var5);
      } catch (SAXException var6) {
         throw (ParseException)new ParseException(ExceptionUtils.getMessage(var6), 0).initCause(var6);
      } catch (ParserConfigurationException var7) {
         throw (ParseException)new ParseException(ExceptionUtils.getMessage(var7), 0).initCause(var7);
      }
   }

   private static String[] a(Templates var0) {
      String[] var1;
      try {
         List var2 = XsltUtil.getVariablesUsedByTemplates(var0);
         var1 = var2.toArray(new String[var2.size()]);
      } catch (Exception var3) {
         logger.log(Level.WARNING, g[20], var3);
         var1 = a;
      }

      return var1;
   }

   private static void a(Document var0) {
      NodeList var1 = var0.getDocumentElement().getChildNodes();

      for (int var2 = 0; var2 < var1.getLength(); var2++) {
         Node var3 = var1.item(var2);
         if (var3.getNodeType() == 1) {
            String[] var8 = g;
            if (var8[17].equals(var3.getNamespaceURI()) && var8[14].equals(var3.getLocalName())) {
               NamedNodeMap var4 = var3.getAttributes();
               ArrayList var5 = null;

               for (int var6 = 0; var6 < var4.getLength(); var6++) {
                  var8 = g;
                  if (var8[6].equals(var4.item(var6).getNamespaceURI())
                     || var8[12].equals(var4.item(var6).getNamespaceURI())
                     || var8[5].equals(var4.item(var6).getNamespaceURI())) {
                     if (var5 == null) {
                        var5 = new ArrayList();
                     }

                     var5.add(var4.item(var6));
                  }
               }

               if (var5 != null) {
                  for (Node var7 : var5) {
                     var4.removeNamedItemNS(var7.getNamespaceURI(), var7.getLocalName());
                  }
               }
            }
         }
      }
   }

   private static void b(Document var0) {
      NodeList var1 = var0.getDocumentElement().getChildNodes();

      for (int var2 = 0; var2 < var1.getLength(); var2++) {
         Node var3 = var1.item(var2);
         if (var3.getNodeType() == 1) {
            String[] var6 = g;
            if (var6[18].equals(var3.getNamespaceURI()) && var6[10].equals(var3.getLocalName())) {
               Element var4 = (Element)var3;
               String var5 = var4.getAttribute(var6[9]);
               if (var4.hasAttribute(var6[11]) && !var5.equalsIgnoreCase(var6[4])) {
                  if (logger.isLoggable(Level.FINE)) {
                     logger.fine(var6[0] + var5 + var6[19]);
                  }

                  var6 = g;
                  var4.setAttribute(var6[11], var6[16]);
               }
            }
         }
      }
   }

   static {
      String[] var5 = new String[21];
      int var3 = 0;
      String var2 = "vMg\u0018'\u0014wUE#\u001e4\u0019nNV#\u0014/\u000eq_Km\u0016a\u000bqI\u0002[\"\r9>]Pl\u001caJ\u0014SVw\u0001{B1RAo_\"\u0002s\u0014Qb\t.\u0003\u0003\n\f3\u001bSVw\u0001{B1COo_ \u001d\u007fXJf_.\u001fy\u0014Zb\u001d \u0003\u0005nvE\\y\u0014SVw\u0001{B1RAo_\"\u0002s\u0014Qb\t.\u0003\u001bSVw\u0001{B1COo_ \u001d\u007fXJf_.\u001fy\u0014Zb\u001d \u0003'XMn_-Zj^Ak_9\u0000r\u0015Fj\u0002 \u000fr^dl\u0003\"\bFHNw4/\u000eq_Km\u0016'XMn_-Zj^Ak_9\u0000r\u0015Fj\u0002 \u000fr^dl\u0003\"\bFHNw4/\u000eq_Km\u0016\b^L`\u001e%\u0004p\\\u0006TWw\u00014\u0019\b^L`\u001e%\u0004p\\\u001aSVw\u0001{B1COo_ \u001d\u007fXJf_.\u001fy\u0014Zp\u001d5\u001aSVw\u0001{B1COo_ \u001d\u007fXJf_.\u001fy\u0014Zp\u001d5\u0006TWw\u00014\u0019=nLb\u0013-\b>OM#\u0001 \u001fm^\u0002p\u00058\u0001{HJf\u00145W>OPb\u001f2\u000bqIOf\u0003a\u000b\u007fXVl\u00038Ml^Vv\u0003/\bz\u001bLv\u001d-\u0005nvE\\y$SVw\u0001{B1LUt_6^0TPd^pT'\u0002\r[\"\rBJICm\u0002'\u0002lV$SVw\u0001{B1LUt_6^0TPd^pT'\u0002\r[\"\rBJICm\u0002'\u0002lV";
      int var4 = "vMg\u0018'\u0014wUE#\u001e4\u0019nNV#\u0014/\u000eq_Km\u0016a\u000bqI\u0002[\"\r9>]Pl\u001caJ\u0014SVw\u0001{B1RAo_\"\u0002s\u0014Qb\t.\u0003\u0003\n\f3\u001bSVw\u0001{B1COo_ \u001d\u007fXJf_.\u001fy\u0014Zb\u001d \u0003\u0005nvE\\y\u0014SVw\u0001{B1RAo_\"\u0002s\u0014Qb\t.\u0003\u001bSVw\u0001{B1COo_ \u001d\u007fXJf_.\u001fy\u0014Zb\u001d \u0003'XMn_-Zj^Ak_9\u0000r\u0015Fj\u0002 \u000fr^dl\u0003\"\bFHNw4/\u000eq_Km\u0016'XMn_-Zj^Ak_9\u0000r\u0015Fj\u0002 \u000fr^dl\u0003\"\bFHNw4/\u000eq_Km\u0016\b^L`\u001e%\u0004p\\\u0006TWw\u00014\u0019\b^L`\u001e%\u0004p\\\u001aSVw\u0001{B1COo_ \u001d\u007fXJf_.\u001fy\u0014Zp\u001d5\u001aSVw\u0001{B1COo_ \u001d\u007fXJf_.\u001fy\u0014Zp\u001d5\u0006TWw\u00014\u0019=nLb\u0013-\b>OM#\u0001 \u001fm^\u0002p\u00058\u0001{HJf\u00145W>OPb\u001f2\u000bqIOf\u0003a\u000b\u007fXVl\u00038Ml^Vv\u0003/\bz\u001bLv\u001d-\u0005nvE\\y$SVw\u0001{B1LUt_6^0TPd^pT'\u0002\r[\"\rBJICm\u0002'\u0002lV$SVw\u0001{B1LUt_6^0TPd^pT'\u0002\r[\"\rBJICm\u0002'\u0002lV"
         .length();
      char var1 = ')';
      int var7 = -1;

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

         while (true) {
            String var8 = a(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     g = var5;
                     String[] var9 = g;
                     b = g[18];
                     c = var9[3];
                     f = var9[8];
                     e = var9[1];
                     d = var9[13];
                     logger = Logger.getLogger(StylesheetCompiler.class.getName());
                     a = new String[0];
                     return;
                  }

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

                  var2 = "=#V?@kjNE\u000fhGb/YlW<\u0004\"\u0018n#E5\u0014l[\u007f`N1\u0012)[:uC\"\t-]vfQp\u0006>Pw#Q$\u0019 ZikG5\u0014";
                  var4 = "=#V?@kjNE\u000fhGb/YlW<\u0004\"\u0018n#E5\u0014l[\u007f`N1\u0012)[:uC\"\t-]vfQp\u0006>Pw#Q$\u0019 ZikG5\u0014".length();
                  var1 = '\r';
                  var7 = -1;
            }

            var10000 = 119;
            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] ^ 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 -> 109;
            case 1 -> 116;
            case 2 -> 85;
            case 3 -> 39;
            case 4 -> 23;
            case 5 -> 59;
            default -> 72;
         });
      }

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