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

import com.l7tech.external.assertions.gatewaygraphql.EntityTypeInfo;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.entityref.EntityRefResolver;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.entityref.EntityRefUtil;
import com.l7tech.gateway.common.transport.jms.JmsConnection;
import com.l7tech.gateway.common.transport.jms.JmsEndpoint;
import com.l7tech.gateway.common.transport.jms.JmsProviderType;
import com.l7tech.gateway.common.transport.jms.TibcoEmsConstants.TibjmsContext;
import com.l7tech.gateway.common.transport.jms.TibcoEmsConstants.TibjmsSSL;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.PersistentEntity;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.function.Predicate;
import org.apache.commons.lang3.StringUtils;

public class JmsHelper {
   public static final String INBOUND_DIRECTION;
   public static final String OUTBOUND_DIRECTION;
   public static final String GENERIC_JMS_PROVIDER_TYPE;
   public static final String TIBCO_PROVIDER_TYPE;
   public static final String MQ_PROVIDER_TYPE;
   public static final String WEBLOGIC_PROVIDER_TYPE;
   public static final String DEFAULT_KEY;
   public static final String QUEUE_TYPE;
   public static final String TOPIC_TYPE;
   private static final Set<String> a;
   private static final Predicate<String> b;
   private final JmsEndpoint c;
   private final JmsConnection d;
   private final Properties e;
   private Map<String, String> f;
   private Map<String, String> g;
   private static final String[] h;

   public JmsHelper(JmsEndpoint var1, JmsConnection var2) {
      this(var1, var2, false);
   }

   public JmsHelper(JmsEndpoint var1, JmsConnection var2, boolean var3) {
      this.c = var1;
      this.d = var2;
      this.e = var3 ? this.a(var2.properties()) : var2.properties();
   }

   public JmsEndpoint getJmsEndpoint() {
      return this.c;
   }

   public JmsConnection getJmsConnection() {
      return this.d;
   }

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

   public void setName(String var1) {
      this.c.setName(var1);
      this.d.setName(var1);
   }

   public String getDirection() {
      String var10000;
      if (this.c.isMessageSource()) {
         String[] var1 = h;
         var10000 = var1[9];
      } else {
         var10000 = h[12];
      }

      return var10000;
   }

   public void setDirection(String var1) {
      this.c.setMessageSource(h[9].equals(var1));
   }

   public String getProviderType() {
      return this.d.getProviderType() != null ? this.d.getProviderType().getName().toUpperCase(Locale.ROOT) : h[0];
   }

   public void setProviderType(String var1) {
      if (!h[3].equals(var1)) {
         if (TIBCO_PROVIDER_TYPE.equals(var1)) {
            this.d.setProviderType(JmsProviderType.Tibco);
         } else if (MQ_PROVIDER_TYPE.equals(var1)) {
            this.d.setProviderType(JmsProviderType.MQ);
         } else if (WEBLOGIC_PROVIDER_TYPE.equals(var1)) {
            this.d.setProviderType(JmsProviderType.Weblogic);
         }

         this.setProviderTypeDefaults();
      }
   }

   public String getInitialContextFactoryClassname() {
      return this.d.getInitialContextFactoryClassname();
   }

   public void setInitialContextFactoryClassname(String var1) {
      this.d.setInitialContextFactoryClassname(var1);
   }

   public String getConnectionFactoryName() {
      return this.d.getQueueFactoryUrl();
   }

   public void setConnectionFactoryName(String var1) {
      this.d.setQueueFactoryUrl(var1);
   }

   public String getJndiUrl() {
      return this.d.getJndiUrl();
   }

   public void setJndiUrl(String var1) {
      this.d.setJndiUrl(var1);
   }

   public String getJndiUsername() {
      return this.e.getProperty(h[11]);
   }

   public void setJndiUsername(String var1) {
      if (var1 != null) {
         this.e.setProperty(h[6], var1);
      }
   }

   public String getJndiPassword() {
      return this.e.getProperty(h[13]);
   }

   public void setJndiPassword(String var1) {
      if (var1 != null) {
         this.e.setProperty(h[1], var1);
      }
   }

   public JmsDestinationDTO.JmsSslDetails getJndiSslDetails() {
      return JmsSslDetailsHelper.getJndiSslDetailsFrom(this.e);
   }

   public void setJndiSslDetails(JmsDestinationDTO.JmsSslDetails var1) {
      JmsSslDetailsHelper.setJndiSslDetailsTo(this.e, var1, this.d.getProviderType());
   }

   public String getDestinationType() {
      String var10000;
      if (this.c.isQueue()) {
         String[] var1 = h;
         var10000 = var1[14];
      } else {
         var10000 = h[5];
      }

      return var10000;
   }

   public void setDestinationType(String var1) {
      this.c.setQueue(h[15].equals(var1));
   }

   public String getDestinationName() {
      return this.c.getDestinationName();
   }

   public void setDestinationName(String var1) {
      this.c.setDestinationName(var1);
   }

   public String getDestinationUsername() {
      return this.d.getUsername();
   }

   public void setDestinationUsername(String var1) {
      this.d.setUsername(var1);
      this.c.setUsername(var1);
   }

   public String getDestinationPassword() {
      return this.d.getPassword();
   }

   public void setDestinationPassword(String var1) {
      this.d.setPassword(var1);
      this.c.setPassword(var1);
   }

   public JmsDestinationDTO.JmsSslDetails getDestinationSslDetails() {
      return JmsSslDetailsHelper.getDestinationSslDetailsFrom(this.e);
   }

   public void setDestinationSslDetails(JmsDestinationDTO.JmsSslDetails var1) {
      JmsSslDetailsHelper.setDestinationSslDetailsTo(this.e, var1, this.d.getProviderType());
   }

   public boolean isTemplate() {
      return this.d.isTemplate();
   }

   public void setTemplate(boolean var1) {
      this.d.setTemplate(var1);
   }

   public boolean isEnabled() {
      return !this.c.isDisabled();
   }

   public void setEnabled(boolean var1) {
      this.c.setDisabled(!var1);
   }

   public Map<String, String> getDirectionOptions() {
      if (this.f == null) {
         if (h[9].equals(this.getDirection())) {
            this.f = JmsInboundOptionsHelper.getOptionsFrom(this.c, this.e, this::a);
         } else {
            this.f = JmsOutboundOptionsHelper.getOptionsFrom(this.c, this.e);
         }
      }

      return this.f;
   }

   public void setDirectionOptions(Map<String, String> var1) {
      if (h[9].equals(this.getDirection())) {
         JmsInboundOptionsHelper.setOptionsTo(this.c, this.e, var1, this::b);
      } else {
         JmsOutboundOptionsHelper.setOptionsTo(this.c, this.e, var1);
      }
   }

   public void resetDirectionOptions() {
      if (h[9].equals(this.getDirection())) {
         JmsInboundOptionsHelper.resetOptionsTo(this.c, this.e);
      } else {
         JmsOutboundOptionsHelper.resetOptionsTo(this.c, this.e);
      }
   }

   public Map<String, String> getAdditionalProperties() {
      if (this.g == null) {
         this.g = new HashMap<>();
         this.e.stringPropertyNames().stream().filter(b).forEach(var1 -> this.g.put(var1, this.e.getProperty(var1)));
      }

      return this.g;
   }

   public void setAdditionalProperties(Map<String, String> var1) {
      var1.forEach((var1x, var2) -> {
         if (!JmsInboundOptionsHelper.SUPPORTED_OPTIONS.contains(var1x) && !JmsOutboundOptionsHelper.SUPPORTED_OPTIONS.contains(var1x)) {
            this.e.setProperty(var1x, var2);
         }
      });
   }

   public void resetAdditionalProperties() {
      this.e.forEach((var1, var2) -> {
         if (!JmsInboundOptionsHelper.SUPPORTED_OPTIONS.contains(var1.toString()) && !JmsOutboundOptionsHelper.SUPPORTED_OPTIONS.contains(var1.toString())) {
            this.e.remove(var1);
         }
      });
   }

   public void adjustJmsProperties() {
      this.e.putIfAbsent(JmsConnection.PROP_CONTENT_TYPE_SOURCE, "");
      this.e.putIfAbsent(JmsConnection.PROP_CONTENT_TYPE_VAL, "");
      this.e.putIfAbsent(JmsConnection.PROP_IS_HARDWIRED_SERVICE, Boolean.FALSE.toString());
      if (JmsProviderType.Tibco.equals(this.d.getProviderType())) {
         this.e.putIfAbsent(TibjmsContext.SSL_AUTH_ONLY, toJmsBooleanValue(false));
         this.e.putIfAbsent(TibjmsContext.SSL_ENABLE_VERIFY_HOST, toJmsBooleanValue(false));
         this.e.putIfAbsent(TibjmsContext.SSL_ENABLE_VERIFY_HOST_NAME, toJmsBooleanValue(false));
         this.e.putIfAbsent(TibjmsSSL.AUTH_ONLY, toJmsBooleanValue(false));
         this.e.putIfAbsent(TibjmsSSL.ENABLE_VERIFY_HOST, toJmsBooleanValue(false));
         this.e.putIfAbsent(TibjmsSSL.ENABLE_VERIFY_HOST_NAME, toJmsBooleanValue(false));
      } else {
         this.e.remove(TibjmsContext.SSL_AUTH_ONLY);
         this.e.remove(TibjmsContext.SSL_ENABLE_VERIFY_HOST);
         this.e.remove(TibjmsContext.SSL_ENABLE_VERIFY_HOST_NAME);
         this.e.remove(TibjmsSSL.IDENTITY);
         this.e.remove(TibjmsSSL.PASSWORD);
         this.e.remove(TibjmsSSL.AUTH_ONLY);
         this.e.remove(TibjmsSSL.ENABLE_VERIFY_HOST);
         this.e.remove(TibjmsSSL.ENABLE_VERIFY_HOST_NAME);
      }

      if (!JmsProviderType.MQ.equals(this.d.getProviderType())) {
         this.e.remove(JmsConnection.PROP_QUEUE_USE_CLIENT_AUTH);
      }

      if (!h[14].equals(this.getDestinationType())) {
         this.e.remove(JmsConnection.PROP_IS_DEDICATED_CONSUMER);
         this.e.remove(JmsConnection.PROP_DEDICATED_CONSUMER_SIZE);
      }

      this.d.properties(this.e);
   }

   public static boolean fromJmsBooleanValue(String var0) {
      return JmsConnection.VALUE_BOOLEAN_TRUE.equals(var0);
   }

   public static String toJmsBooleanValue(boolean var0) {
      return var0 ? JmsConnection.VALUE_BOOLEAN_TRUE : JmsConnection.VALUE_BOOLEAN_FALSE;
   }

   public static String toFQKeyAlias(String var0, String var1) {
      return toFQKeyAlias(var0, var1, false);
   }

   public static String toFQKeyAlias(String var0, String var1, boolean var2) {
      if (StringUtils.isEmpty(var1)) {
         return var2 ? h[17] : null;
      } else {
         return (StringUtils.isNotEmpty(var0) ? var0 : PersistentEntity.DEFAULT_GOID.toHexString()) + ":" + var1;
      }
   }

   public static String[] toKeyInfo(String var0) {
      String[] var1 = var0.split(":");
      return var1.length >= 2 ? var1 : new String[]{PersistentEntity.DEFAULT_GOID.toHexString(), var0};
   }

   public void setProviderTypeDefaults() {
      JmsProviderType var1 = this.d.getProviderType();
      if (var1 != null) {
         if (StringUtils.isNotEmpty(this.d.getQueueFactoryUrl())) {
            this.d.setQueueFactoryUrl(var1.getDefaultQueueFactoryUrl());
         }

         if (StringUtils.isNotEmpty(this.d.getTopicFactoryUrl())) {
            this.d.setTopicFactoryUrl(var1.getDefaultTopicFactoryUrl());
         }

         if (StringUtils.isNotEmpty(this.d.getDestinationFactoryUrl())) {
            this.d.setDestinationFactoryUrl(var1.getDefaultDestinationFactoryUrl());
         }
      }
   }

   private Properties a(Properties var1) {
      Properties var2 = new Properties();
      a.stream().filter(var1::containsKey).forEach(var2x -> var2.put(var2x, var1.getProperty(var2x)));
      JmsSslDetailsHelper.JMS_KNOWN_PROPERTIES.stream().filter(var1::containsKey).forEach(var2x -> var2.put(var2x, var1.getProperty(var2x)));
      return var2;
   }

   private String a(String var1, String var2) {
      return h[4].equals(var1) ? this.a(Goid.parseGoid(var2)) : var2;
   }

   private String b(String var1, String var2) {
      String[] var3 = h;
      if (var3[10].equals(var1)) {
         return this.a(var2);
      } else {
         return h[19].equals(var1) ? this.b(var2) : var2;
      }
   }

   private String a(String var1) {
      EntityRefResolver var2 = EntityRefUtil.getRefResolver(EntityTypeInfo.SERVICE);
      PersistentEntity var3 = (PersistentEntity)var2.toEntity(EntityRefUtil.toRefNameProperty(h[18], var1));
      return var3.getId();
   }

   private String b(String var1) {
      EntityRefResolver var2 = EntityRefUtil.getRefResolver(EntityTypeInfo.SERVICE);
      PersistentEntity var3 = (PersistentEntity)var2.toEntity(var1);
      return var3.getId();
   }

   private String a(Goid var1) {
      EntityRefResolver var2 = EntityRefUtil.getRefResolver(EntityTypeInfo.SERVICE);
      PersistentEntity var3 = (PersistentEntity)var2.toEntityQuietly(var1);
      return var2.toEntityRefName(var3, true, var1);
   }

   public static boolean isValidDirection(String var0) {
      String[] var1 = h;
      return var1[16].equals(var0) || var1[7].equals(var0);
   }

   public static boolean isValidProviderType(String var0) {
      return h[0].equals(var0) || TIBCO_PROVIDER_TYPE.equals(var0) || MQ_PROVIDER_TYPE.equals(var0) || WEBLOGIC_PROVIDER_TYPE.equals(var0);
   }

   public static String[] splitJmsFQName(String var0) {
      String[] var1 = new String[3];
      int var2 = 0;
      int var3 = 0;

      while (var2 < 2) {
         int var4 = var0.indexOf(46, var3);
         if (var4 == -1) {
            break;
         }

         var1[var2++] = var0.substring(var3, var4);
         var3 = var4 + 1;
      }

      if (var2 < 3) {
         var1[var2++] = var0.substring(var3);
      }

      if (!isValidDirection(var1[0])) {
         var2 = 0;
      }

      return var2 != 3 ? null : var1;
   }

   static {
      String[] var5 = new String[20];
      int var3 = 0;
      String var2 = "$[Qit>_CTR\u007f \t\u007fiM\b\u0019}\u000ewqK\b\u0004y\u0000kmER\u000e2\u0000lzHC\u0019h\n\u007fs_\t_ZZjg\"P7 \u000b$[Qit>_CTR\u007f\u001c\np}CS\u0019xMv~^B\u0000u\u0011{{\u007fC\u0005j\n}zbG\u001ay\u00057QOee\u001e\t\u007fiM\b\u0019}\u000ewqK\b\u0004y\u0000kmER\u000e2\u0013lvBE\u001el\u0002r\b,KKni\"R'\u00057QOee\u0007*P]cs9X\u0018\np}CS\u0019xMv~^B\u0000u\u0011{{\u007fC\u0005j\n}z\u001e\t\u007fiM\b\u0019}\u000ewqK\b\u0004y\u0000kmER\u000e2\u0013lvBE\u001el\u0002r\b,KKni\"R' \t\u007fiM\b\u0019}\u000ewqK\b\u0004y\u0000kmER\u000e2\u0000lzHC\u0019h\n\u007fs_\u00052KZyc\u00052KZyc\u0007*P]cs9X\t_ZZjg\"P7 ";
      int var4 = "$[Qit>_CTR\u007f \t\u007fiM\b\u0019}\u000ewqK\b\u0004y\u0000kmER\u000e2\u0000lzHC\u0019h\n\u007fs_\t_ZZjg\"P7 \u000b$[Qit>_CTR\u007f\u001c\np}CS\u0019xMv~^B\u0000u\u0011{{\u007fC\u0005j\n}zbG\u001ay\u00057QOee\u001e\t\u007fiM\b\u0019}\u000ewqK\b\u0004y\u0000kmER\u000e2\u0013lvBE\u001el\u0002r\b,KKni\"R'\u00057QOee\u0007*P]cs9X\u0018\np}CS\u0019xMv~^B\u0000u\u0011{{\u007fC\u0005j\n}z\u001e\t\u007fiM\b\u0019}\u000ewqK\b\u0004y\u0000kmER\u000e2\u0013lvBE\u001el\u0002r\b,KKni\"R' \t\u007fiM\b\u0019}\u000ewqK\b\u0004y\u0000kmER\u000e2\u0000lzHC\u0019h\n\u007fs_\u00052KZyc\u00052KZyc\u0007*P]cs9X\t_ZZjg\"P7 "
         .length();
      char var1 = 11;
      int var7 = -1;

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

         while (true) {
            String var9 = a(var10000, c(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var7 += var1) >= var4) {
                     h = var5;
                     String[] var10 = h;
                     INBOUND_DIRECTION = h[9];
                     QUEUE_TYPE = var10[14];
                     TOPIC_TYPE = var10[8];
                     GENERIC_JMS_PROVIDER_TYPE = var10[0];
                     DEFAULT_KEY = var10[2];
                     OUTBOUND_DIRECTION = var10[12];
                     TIBCO_PROVIDER_TYPE = JmsProviderType.Tibco.getName().toUpperCase(Locale.ROOT);
                     MQ_PROVIDER_TYPE = JmsProviderType.MQ.getName().toUpperCase(Locale.ROOT);
                     WEBLOGIC_PROVIDER_TYPE = JmsProviderType.Weblogic.getName().toUpperCase(Locale.ROOT);
                     String[] var13 = new String[2];
                     String[] var8 = h;
                     var13[0] = var8[6];
                     var13[1] = var8[1];
                     a = new HashSet<>(Arrays.asList(var13));
                     b = var0 -> !var0.startsWith(JmsConnection.PREFIX)
                        && !a.contains(var0)
                        && !JmsSslDetailsHelper.JMS_KNOWN_PROPERTIES.contains(var0)
                        && !JmsConnection.JMS_MSG_PROP_WITH_SOAPACTION.equals(var0);
                     return;
                  }

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

                  var2 = "L&1\u001e\u0017_5W,,!\u001a^)\u001cW- \u001e\u000eD%\u0010+#\u0003\u001f](L&&\"\u001eX7W '?\u001aG$";
                  var4 = "L&1\u001e\u0017_5W,,!\u001a^)\u001cW- \u001e\u000eD%\u0010+#\u0003\u001f](L&&\"\u001eX7W '?\u001aG$".length();
                  var1 = 14;
                  var7 = -1;
            }

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

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

      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 -> 91;
            case 2 -> 90;
            case 3 -> 105;
            case 4 -> 99;
            case 5 -> 50;
            default -> 89;
         });
      }

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