package com.l7tech.external.assertions.gatewaygraphql.server.resolver.helper;

import com.l7tech.external.assertions.gatewaygraphql.server.data.ActiveConnectorDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.EntityProperty;
import com.l7tech.external.assertions.gatewaygraphql.server.input.EntityPropertyInput;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.EntityResolver;
import com.l7tech.gateway.common.transport.SsgActiveConnector;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.security.password.SecurePasswordManager;
import com.l7tech.util.CollectionUtils.MapBuilder;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;

public class SftpActiveConnectorHelper implements ActiveConnectorHelper {
   private final SecurePasswordManager a;
   private static final String b;
   private static final String c;
   private static final Set<String> d;
   private static final Map<String, String> e;
   private static final Map<String, String> f;
   private static final String[] g;

   public SftpActiveConnectorHelper(SecurePasswordManager var1) {
      this.a = var1;
   }

   @Override
   public void setProperties(ActiveConnectorDTO.ActiveConnectorInput var1, SsgActiveConnector var2) {
      this.a(var1.getProperties(), var2);
   }

   @Override
   public List<EntityProperty> getProperties(SsgActiveConnector var1) {
      List var2 = var1.getPropertyNames()
         .stream()
         .filter(f::containsKey)
         .filter(SftpActiveConnectorHelper::a)
         .map(var1x -> new EntityProperty(f.get(var1x), var1.getProperty(var1x)))
         .collect(Collectors.toList());
      String var3 = var1.getProperty(SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_OID);
      if (StringUtils.isNotEmpty(var3)) {
         String[] var5 = g;
         var2.add(new EntityProperty(var5[7], this.c(var3)));
      }

      String var4 = var1.getProperty(SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_KEY_OID);
      if (StringUtils.isNotEmpty(var4)) {
         var2.add(new EntityProperty(g[11], this.c(var4)));
      }

      return var2;
   }

   @Override
   public void setAdvancedProperties(ActiveConnectorDTO.ActiveConnectorInput var1, SsgActiveConnector var2) {
      this.b(var1.getAdvancedProperties(), var2);
   }

   @Override
   public List<EntityProperty> getAdvancedProperties(SsgActiveConnector var1) {
      return var1.getPropertyNames()
         .stream()
         .filter(var0 -> !f.containsKey(var0) && a(var0))
         .map(var1x -> new EntityProperty(var1x, var1.getProperty(var1x)))
         .collect(Collectors.toList());
   }

   @Override
   public void setPartialProperties(ActiveConnectorDTO.ActiveConnectorInput var1, SsgActiveConnector var2) {
      this.a(var1.getPartialProperties(), var2);
   }

   @Override
   public void setAdvancedPartialProperties(ActiveConnectorDTO.ActiveConnectorInput var1, SsgActiveConnector var2) {
      this.b(var1.getPartialAdvancedProperties(), var2);
   }

   private static boolean a(String var0) {
      return !d.contains(var0);
   }

   private Goid b(String var1) {
      return EntityResolver.toEntityGoidByName(this.a, var1);
   }

   private String c(String var1) {
      return EntityResolver.toEntityNameByGoid(this.a, Goid.parseGoid(var1));
   }

   private void a(List<EntityPropertyInput> var1, SsgActiveConnector var2) {
      var1.stream().filter(var0 -> e.containsKey(var0.getName())).forEach(var1x -> var2.setProperty(e.get(var1x.getName()), var1x.getValue()));
      String var3 = var2.getProperty(SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_OID);
      if (StringUtils.isNotEmpty(var3)) {
         var2.setProperty(SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_OID, Goid.toString(this.b(var3)));
      }

      String var4 = var2.getProperty(SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_KEY_OID);
      if (StringUtils.isNotEmpty(var4)) {
         var2.setProperty(SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_KEY_OID, Goid.toString(this.b(var4)));
      }
   }

   private void b(List<EntityPropertyInput> var1, SsgActiveConnector var2) {
      var1.stream().filter(var0 -> !e.containsKey(var0.getName())).forEach(var1x -> var2.setProperty(var1x.getName(), var1x.getValue()));
   }

   static {
      String[] var5 = new String[17];
      int var3 = 0;
      String var2 = "N\u001a3)ay\u000bo\u001689Hc\u0012U\u000b\u0004T\u00101(\fL\u0010.0Md\u000bY\r4=h\u000fX\u001a.9po0R-'?ac\tY\u0004L\u00100(\u0017I\f'\u0018al\u001eI\u00136\u0017ar>P\u0018-.m~\u0017Q\f\tX\u001609g~\u0010N\u0006\u0012O\u001a!)vo/]\f1+kx\u001br\u001e/9\u0012O\u001a!)vo/]\f1+kx\u001br\u001e/9\bI\f'.jk\u0012Y\u000fZ\u0016.9Jk\u0012Y/#(po\rR\u0015O\u001a!)vo/]\f1+kx\u001bw\u001a;\u0012eg\u001a!o\u00196,Wo\rJ\u001a0\two;Y\u0019#)h~4Y\u0007\u00030ce\rU\u000b*1w\u0011O\u001a0*ax9U\u0011%9vZ\rU\u00116\u0012Y\u0011#>ho-Y\f2\u0011ay\f]\u0018'/";
      int var4 = "N\u001a3)ay\u000bo\u001689Hc\u0012U\u000b\u0004T\u00101(\fL\u0010.0Md\u000bY\r4=h\u000fX\u001a.9po0R-'?ac\tY\u0004L\u00100(\u0017I\f'\u0018al\u001eI\u00136\u0017ar>P\u0018-.m~\u0017Q\f\tX\u001609g~\u0010N\u0006\u0012O\u001a!)vo/]\f1+kx\u001br\u001e/9\u0012O\u001a!)vo/]\f1+kx\u001br\u001e/9\bI\f'.jk\u0012Y\u000fZ\u0016.9Jk\u0012Y/#(po\rR\u0015O\u001a!)vo/]\f1+kx\u001bw\u001a;\u0012eg\u001a!o\u00196,Wo\rJ\u001a0\two;Y\u0019#)h~4Y\u0007\u00030ce\rU\u000b*1w\u0011O\u001a0*ax9U\u0011%9vZ\rU\u00116\u0012Y\u0011#>ho-Y\f2\u0011ay\f]\u0018'/"
         .length();
      char var1 = 16;
      int var7 = -1;

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

         while (true) {
            String var9 = a(var10000, d(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var7 += var1) >= var4) {
                     g = var5;
                     String[] var10 = g;
                     b = g[7];
                     c = var10[11];
                     String[] var13 = new String[4];
                     String[] var8 = g;
                     var13[0] = var8[8];
                     var13[1] = SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_OID;
                     var13[2] = var8[15];
                     var13[3] = SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_KEY_OID;
                     d = new HashSet<>(Arrays.asList(var13));
                     e = MapBuilder.builder()
                        .put(var8[3], SsgActiveConnector.PROPERTIES_KEY_SFTP_DELETE_ON_RECEIVE)
                        .put(var8[6], SsgActiveConnector.PROPERTIES_KEY_SFTP_DIRECTORY)
                        .put(var8[1], SsgActiveConnector.PROPERTIES_KEY_SFTP_HOST)
                        .put(var8[4], SsgActiveConnector.PROPERTIES_KEY_SFTP_PORT)
                        .put(var8[9], SsgActiveConnector.PROPERTIES_KEY_SFTP_USERNAME)
                        .put(var8[7], SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_OID)
                        .put(var8[11], SsgActiveConnector.PROPERTIES_KEY_SFTP_SECURE_PASSWORD_KEY_OID)
                        .put(var8[14], SsgActiveConnector.PROPERTIES_KEY_ENABLE_RESPONSE_MESSAGES)
                        .put(var8[16], SsgActiveConnector.PROPERTIES_KEY_OVERRIDE_CONTENT_TYPE)
                        .put(var8[2], SsgActiveConnector.PROPERTIES_KEY_POLLING_INTERVAL)
                        .put(var8[10], SsgActiveConnector.PROPERTIES_KEY_SFTP_FILE_NAME_PATTERN)
                        .put(var8[0], SsgActiveConnector.PROPERTIES_KEY_REQUEST_SIZE_LIMIT)
                        .put(var8[5], var8[12])
                        .put(var8[13], SsgActiveConnector.PROPERTIES_KEY_SFTP_SERVER_FINGER_PRINT)
                        .map();
                     f = e.entrySet().stream().collect(Collectors.toMap(Entry::getValue, Entry::getKey));
                     return;
                  }

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

                  var2 = "P\u0005>6ip0B\u0013.4tg\u0004h\u0005$\rzx\u0005\u000b@\u000f37~{\u0014w\u0019-&";
                  var4 = "P\u0005>6ip0B\u0013.4tg\u0004h\u0005$\rzx\u0005\u000b@\u000f37~{\u0014w\u0019-&".length();
                  var1 = 21;
                  var7 = -1;
            }

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

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

      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 -> 117;
            case 1 -> 54;
            case 2 -> 11;
            case 3 -> 21;
            case 4 -> 77;
            case 5 -> 67;
            default -> 54;
         });
      }

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