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

import com.l7tech.external.assertions.gatewaygraphql.server.data.JmsDestination;
import com.l7tech.external.assertions.gatewaygraphql.server.data.JmsDestinationDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.error.GatewayEntityError;
import com.l7tech.gateway.common.transport.jms.JmsConnection;
import com.l7tech.gateway.common.transport.jms.JmsEndpoint;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.JmsEndpointHeader;
import com.l7tech.objectmodel.PersistentEntity;
import com.l7tech.server.EntityHeaderUtils;
import com.l7tech.server.transport.jms.JmsConnectionManager;
import com.l7tech.server.transport.jms.JmsEndpointManager;
import com.l7tech.util.ExceptionUtils;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import lombok.Generated;

public class JmsDestinationFinder extends EntityAwareFinder<JmsDestination, JmsDestinationDTO.JmsDestinationInput> {
   @Generated
   private static final Logger b;
   private final JmsEndpointManager c;
   private final JmsConnectionManager d;
   private final Map<Goid, JmsEndpointHeader> e = new HashMap<>();
   private static final String[] g;

   public JmsDestinationFinder(JmsEndpointManager var1, JmsConnectionManager var2) {
      this.c = var1;
      this.d = var2;
   }

   public JmsDestination find(JmsDestinationDTO.JmsDestinationInput var1) {
      return this.findMultiple(var1).stream().findFirst().orElse(null);
   }

   public Collection<JmsDestination> findMultiple(JmsDestinationDTO.JmsDestinationInput var1) {
      return this.a()
         .values()
         .stream()
         .filter(var2 -> this.a(var2, var1.getDirection(), var1.getProviderType(), var1.getName()))
         .map(this::b)
         .collect(Collectors.toList());
   }

   public void markCreated(JmsDestination var1) {
      this.a().put(var1.getGoid(), this.a(var1));
   }

   public void markUpdated(JmsDestination var1) {
      this.a().put(var1.getGoid(), this.a(var1));
   }

   public void markDeleted(JmsDestination var1) {
      this.a().remove(var1.getGoid());
   }

   private JmsEndpointHeader a(JmsDestination var1) {
      JmsEndpointHeader var2 = (JmsEndpointHeader)EntityHeaderUtils.fromEntity(var1.getEndpoint());
      if (var1.getConnection().getProviderType() != null) {
         var2.setProviderName(var1.getConnection().getProviderType().getName());
      }

      return var2;
   }

   private boolean a(JmsEndpointHeader var1, String var2, String var3, String var4) {
      if (var1.getName().equals(var4) && (var3 == null || this.a(var1).equals(var3))) {
         if (var2 == null) {
            return true;
         }

         if (var1.isIncoming()) {
            String[] var5 = g;
            if (var5[3].equals(var2)) {
               return true;
            }
         }

         if (!var1.isIncoming() && g[0].equals(var2)) {
            return true;
         }
      }

      return false;
   }

   private String a(JmsEndpointHeader var1) {
      String var2 = var1.getProviderName();
      return var2 != null ? var2.toUpperCase(Locale.ROOT) : g[4];
   }

   private JmsDestination b(JmsEndpointHeader var1) {
      try {
         JmsEndpoint var2 = (JmsEndpoint)this.c.findByHeader(var1);
         if (var2 != null) {
            JmsConnection var3 = (JmsConnection)this.d.findByPrimaryKey(var2.getConnectionGoid());

            try {
               if (var3 == null) {
                  throw GatewayEntityError.newCreateUpdateMutationException(EntityType.JMS_CONNECTION, var2.getName() + "/" + var2.getConnectionGoid() + g[6]);
               }
            } catch (FindException var4) {
               throw a(var4);
            }

            return new JmsDestination(var2, var3);
         } else {
            return null;
         }
      } catch (FindException var5) {
         throw var5;
      }
   }

   private Map<Goid, JmsEndpointHeader> a() {
      if (!this.loaded) {
         try {
            Map var1 = this.b();
            this.c.findAllHeaders().forEach(var2x -> {
               JmsConnection var3 = (JmsConnection)var1.get(var2x.getConnectionGoid());
               if (var3 != null && var3.getProviderType() != null) {
                  var2x.setProviderName(var3.getProviderType().getName());
               }

               this.e.put(var2x.getGoid(), var2x);
            });
         } catch (FindException var2) {
            b.log(Level.INFO, ExceptionUtils.getDebugException(var2), () -> g[5] + ExceptionUtils.getMessageWithCause(var2));
         }

         this.loaded = true;
      }

      return this.e;
   }

   private Map<Goid, JmsConnection> b() {
      try {
         return this.d.findAll().stream().collect(Collectors.toMap(PersistentEntity::getGoid, var0 -> (JmsConnection)var0));
      } catch (FindException var2) {
         b.log(Level.INFO, ExceptionUtils.getDebugException(var2), () -> g[2] + ExceptionUtils.getMessageWithCause(var2));
         return Collections.emptyMap();
      }
   }

   public Map<String, JmsEndpointHeader> getEntitiesByGoids() {
      HashMap var1 = new HashMap();

      try {
         Map var2 = this.b();
         this.c.findAllHeaders().forEach(var3x -> {
            this.a(var3x, (JmsConnection)var2.get(var3x.getConnectionGoid()));
            var1.put(var3x.getGoid().toString(), var3x);
         });
      } catch (FindException var3) {
         b.log(Level.INFO, ExceptionUtils.getDebugException(var3), () -> g[5] + ExceptionUtils.getMessageWithCause(var3));
      }

      return var1;
   }

   public Map<String, JmsEndpointHeader> getEntitiesByNames() {
      HashMap var1 = new HashMap();

      try {
         Map var2 = this.b();
         this.c.findAllHeaders().forEach(var3x -> {
            this.a(var3x, (JmsConnection)var2.get(var3x.getConnectionGoid()));
            var1.put(this.getJMSFQName(var3x), var3x);
         });
      } catch (FindException var3) {
         b.log(Level.INFO, ExceptionUtils.getDebugException(var3), () -> g[1] + ExceptionUtils.getMessageWithCause(var3));
      }

      return var1;
   }

   private void a(JmsEndpointHeader var1, JmsConnection var2) {
      if (var2 != null && var2.getProviderType() != null) {
         var1.setProviderName(var2.getProviderType().getName());
      } else {
         var1.setProviderName(g[9]);
      }
   }

   public String getJMSFQName(JmsEndpointHeader var1) {
      StringBuilder var2 = new StringBuilder();
      String var10001;
      if (var1.isIncoming()) {
         String[] var3 = g;
         var10001 = var3[7];
      } else {
         var10001 = g[8];
      }

      var2.append(var10001);
      var2.append(".");
      var2.append(var1.getProviderName().toUpperCase(Locale.ROOT));
      var2.append(".");
      var2.append(var1.getName());
      return var2.toString();
   }

   @Override
   protected Logger getLogger() {
      return b;
   }

   @Override
   protected Collection<JmsDestination> doFindAll() {
      return null;
   }

   protected boolean matches(JmsDestination var1, JmsDestinationDTO.JmsDestinationInput var2) {
      return false;
   }

   static {
      String[] var5 = new String[10];
      int var3 = 0;
      String var2 = "'\u0016lw>\u001bz,B-1JZ\u0003nQ\u0006 W@\u001f:Q\u001a&\\\u0015\u0006&]\u0004&\u0018D\u0004+F\u0011*VRQ([\u001acL]\u0014n~%\u0010\u0018Q\u0014=@\u0001-YA\u0018!ZH']A\u0010'X\u001by\u00185-1JZ\u0003nQ\u0006 W@\u001f:Q\u001a&\\\u0015\u0006&]\u0004&\u0018S\u0018 P\u0001-_\u0015\u0005&QH\tufQ-[\u0006-]V\u0005'[\u00060\u0002\u0015\u0007!\rzz$\u0000p\u000b/\u0006vp#\u0007wH\tufB-1JZ\u0003nQ\u0006 W@\u001f:Q\u001a&\\\u0015\u0006&]\u0004&\u0018D\u0004+F\u0011*VRQ([\u001acL]\u0014n~%\u0010\u0018Q\u0014=@\u0001-YA\u0018!ZH']A\u0010'X\u001by\u0018\u0016H&VA\u0018:MH'WP\u0002nZ\u00077\u0018P\t'G\u001c\u0007!\rzz$\u0000p";
      int var4 = "'\u0016lw>\u001bz,B-1JZ\u0003nQ\u0006 W@\u001f:Q\u001a&\\\u0015\u0006&]\u0004&\u0018D\u0004+F\u0011*VRQ([\u001acL]\u0014n~%\u0010\u0018Q\u0014=@\u0001-YA\u0018!ZH']A\u0010'X\u001by\u00185-1JZ\u0003nQ\u0006 W@\u001f:Q\u001a&\\\u0015\u0006&]\u0004&\u0018S\u0018 P\u0001-_\u0015\u0005&QH\tufQ-[\u0006-]V\u0005'[\u00060\u0002\u0015\u0007!\rzz$\u0000p\u000b/\u0006vp#\u0007wH\tufB-1JZ\u0003nQ\u0006 W@\u001f:Q\u001a&\\\u0015\u0006&]\u0004&\u0018D\u0004+F\u0011*VRQ([\u001acL]\u0014n~%\u0010\u0018Q\u0014=@\u0001-YA\u0018!ZH']A\u0010'X\u001by\u0018\u0016H&VA\u0018:MH'WP\u0002nZ\u00077\u0018P\t'G\u001c\u0007!\rzz$\u0000p"
         .length();
      char var1 = '\b';
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     g = var5;
                     b = Logger.getLogger(JmsDestinationFinder.class.getName());
                     return;
                  }

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

                  var2 = "\u0018)SH\u0001$E\u0013\u000b\u00109IO\u001c8Hw6JY";
                  var4 = "\u0018)SH\u0001$E\u0013\u000b\u00109IO\u001c8Hw6JY".length();
                  var1 = '\b';
                  var7 = -1;
            }

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

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

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

      return var10000;
   }

   private static String b(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 -> 62;
            case 1 -> 21;
            case 2 -> 110;
            case 3 -> 99;
            case 4 -> 39;
            case 5 -> 24;
            default -> 98;
         });
      }

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