package com.l7tech.external.assertions.gatewaygraphql.server.data;

import com.l7tech.common.mime.ContentTypeHeader;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.FilePart;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.FilePartSupplier;
import com.l7tech.external.assertions.gatewaygraphql.server.util.Util;
import com.l7tech.gateway.common.module.ModuleType;
import com.l7tech.gateway.common.module.ServerModuleFile;
import com.l7tech.objectmodel.FindException;
import com.l7tech.server.module.ServerModuleFileManager;
import com.l7tech.util.Pair;
import com.l7tech.util.ResourceUtils;
import java.io.Closeable;
import java.io.InputStream;
import java.io.StringReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.lang3.StringUtils;

public class ServerModuleFileHelper {
   public static final String SIGNING_CERT_PROPS;
   public static final String SIGNATURE_PROP;
   public static final String CUSTOM_ASSERTION_PROPERTIES_FILE;
   public static final String MODULAR_ASSERTION_MANIFEST_ASSERTION_HEADER_LIST;
   public static final int BYTE_LIMIT_STREAM_PUSH_BACK_SIZE = 4096;
   public static final long DEFAULT_SERVER_MODULE_FILE_UPLOAD_MAXSIZE = 20971520L;
   private final ServerModuleFile a;
   private final ServerModuleFileManager b;
   private FilePartSupplier c;
   private FilePart d;
   private Properties e;
   private Map<String, String> f;
   private static final String[] g;

   public ServerModuleFileHelper(ServerModuleFile var1) {
      this(var1, null);
   }

   public ServerModuleFileHelper(ServerModuleFile var1, ServerModuleFileManager var2) {
      this.a = var1;
      this.b = var2;
   }

   public ServerModuleFile getServerModuleFile() {
      return this.a;
   }

   public String getName() {
      return this.a.getName();
   }

   public ModuleType getModuleType() {
      return this.a.getModuleType();
   }

   public String getModuleSha256() {
      return this.a.getModuleSha256();
   }

   public String getSignature() {
      return this.a(g[5]);
   }

   public String getSignerCertBase64() {
      return this.a(g[7]);
   }

   public Map<String, String> getProperties() {
      if (this.f == null) {
         this.f = new HashMap<>();
         Arrays.stream(ServerModuleFile.getPropertyKeys()).forEach(var1x -> this.f.put(var1x, this.a.getProperty(var1x)));
         String var1 = this.f.get(ServerModuleFile.PROP_ASSERTIONS);

         try {
            if (StringUtils.isNotEmpty(var1)) {
               this.f.put(ServerModuleFile.PROP_ASSERTIONS, Util.buildCsvString(Util.asSorted(Util.splitCsvString(var1))));
            }
         } catch (IllegalArgumentException var5) {
            throw a(var5);
         }

         String var2 = this.f.get(ServerModuleFile.PROP_FILE_NAME);
         if (StringUtils.isNotEmpty(var2)) {
            int var3 = var2.length() - 5;
            String[] var4 = g;
            if (var2.endsWith(var4[4])) {
               var2 = var2.substring(0, var3) + var4[8];
            } else {
               var4 = g;
               if (var2.endsWith(var4[3])) {
                  var2 = var2.substring(0, var3) + var4[2];
               }
            }

            this.f.put(ServerModuleFile.PROP_FILE_NAME, var2);
         }
      }

      return this.f;
   }

   void a(FilePartSupplier var1) {
      this.c = var1;
   }

   public void includeModuleFilePart() {
      if (this.c != null) {
         FilePart var1 = this.a();

         try {
            if (var1 != null) {
               this.c.putResponsePart(var1.getName(), var1);
            }
         } catch (IllegalArgumentException var2) {
            throw a(var2);
         }
      }
   }

   private String a(String var1) {
      try {
         if (this.d == null) {
            this.a();
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      try {
         if (this.e != null) {
            return this.e.getProperty(var1);
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      return null;
   }

   private FilePart a() {
      try {
         return this.b();
      } catch (FindException var2) {
         throw new IllegalArgumentException(g[9], var2);
      }
   }

   private FilePart b() throws FindException {
      try {
         if (this.b == null || this.d != null) {
            return this.d;
         }
      } catch (Throwable var9) {
         throw a(var9);
      }

      Pair var1 = this.b.getModuleBytesAsStreamWithSignature(this.a.getGoid());

      try {
         if (var1 == null) {
            throw new IllegalArgumentException(g[0]);
         }
      } catch (Throwable var10) {
         throw a(var10);
      }

      this.e = new Properties();

      try (StringReader var2 = new StringReader((String)var1.right)) {
         this.e.load(var2);
      } catch (Exception var8) {
         throw new IllegalArgumentException(g[1], var8);
      }

      try {
         this.d = new FilePart(
            this.a.getName(),
            this.getProperties().get(ServerModuleFile.PROP_FILE_NAME),
            ContentTypeHeader.OCTET_STREAM_DEFAULT.getMainValue(),
            () -> (InputStream)var1.left
         );
         if (this.c != null) {
            this.c.runOnClean(() -> ResourceUtils.closeQuietly((Closeable)var1.left));
         }
      } catch (Throwable var6) {
         throw a(var6);
      }

      return this.d;
   }

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

   static {
      String[] var5 = new String[13];
      int var3 = 0;
      String var2 = "\u0007D\u0010|D;C.J\u0000h\b7\u0010jF\u001dz[7\r-C\u000fY\u0006fZ~\u0006$H\u001b|F*\u00068N\u0010)_6\n&NTlP*\u0011+H\u0000`F9C>C\u0011)[7\u0004$J\u0000|Z;C.N\u0000hA2\u0010jM\u001b{\b3\f.^\u0018l\u0004dJ\u0015{\u0005dX\u0015hZ\u0005dX\u001ehZ\t9B\u0013gI*\u00168N\u0015\u0007D\u0010|D?\u0011\u000bX\u0007lZ*\n%EYEA-\u0017\u0004)N\u0006}\u0004dA\u0015{\u0016\u0007D\u0010|D;C.J\u0000h\b7\u0010jF\u001dz[7\r-\u0004)N\u0006}";
      int var4 = "\u0007D\u0010|D;C.J\u0000h\b7\u0010jF\u001dz[7\r-C\u000fY\u0006fZ~\u0006$H\u001b|F*\u00068N\u0010)_6\n&NTlP*\u0011+H\u0000`F9C>C\u0011)[7\u0004$J\u0000|Z;C.N\u0000hA2\u0010jM\u001b{\b3\f.^\u0018l\u0004dJ\u0015{\u0005dX\u0015hZ\u0005dX\u001ehZ\t9B\u0013gI*\u00168N\u0015\u0007D\u0010|D?\u0011\u000bX\u0007lZ*\n%EYEA-\u0017\u0004)N\u0006}\u0004dA\u0015{\u0016\u0007D\u0010|D;C.J\u0000h\b7\u0010jF\u001dz[7\r-\u0004)N\u0006}"
         .length();
      char var1 = 22;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 72;
         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;
                     SIGNING_CERT_PROPS = g[10];
                     CUSTOM_ASSERTION_PROPERTIES_FILE = var9[11];
                     MODULAR_ASSERTION_MANIFEST_ASSERTION_HEADER_LIST = var9[6];
                     SIGNATURE_PROP = var9[12];
                     return;
                  }

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

                  var2 = "1F\u001fe_+$3@\u001ftB2\u0012=]\u001f?@4\u0014\"V\u001eeY#\b\t!Z\u000b\u007fQ2\u000e V";
                  var4 = "1F\u001fe_+$3@\u001ftB2\u0012=]\u001f?@4\u0014\"V\u001eeY#\b\t!Z\u000b\u007fQ2\u000e V".length();
                  var1 = 28;
                  var7 = -1;
            }

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

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

      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 -> 2;
            case 1 -> 99;
            case 2 -> 60;
            case 3 -> 65;
            case 4 -> 96;
            case 5 -> 22;
            default -> 43;
         });
      }

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