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

import com.l7tech.external.assertions.gatewaygraphql.EntityTypeInfo;
import com.l7tech.external.assertions.gatewaygraphql.server.data.PublishedServiceDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.error.GatewayEntityError;
import com.l7tech.external.assertions.gatewaygraphql.server.input.EntityFilterInput;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.FilePartSupplier;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.filter.EntityFilterPredicate;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.filter.EntityFilterPredicateBuilder;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.filter.PojoEntityFieldEvaluator;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.helper.ServiceDocumentHelper;
import com.l7tech.external.assertions.gatewaygraphql.server.util.Util;
import com.l7tech.gateway.common.spring.remoting.RemoteUtils;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.search.objects.Dependency;
import com.l7tech.server.search.objects.DependentEntity;
import com.l7tech.server.service.ServiceManager;
import com.l7tech.util.ExceptionUtils;
import graphql.GraphQLContext;
import graphql.kickstart.tools.GraphQLQueryResolver;
import graphql.schema.DataFetchingEnvironment;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.security.auth.Subject;
import javax.validation.constraints.NotNull;
import lombok.Generated;

public abstract class BasicGraphQLQueryResolver extends BasicGraphQLResolver implements GraphQLQueryResolver {
   private static final Logger b;
   protected final EntityTypeInfo entityTypeInfo;
   private static final String[] i;

   protected BasicGraphQLQueryResolver(EntityTypeInfo var1, ExecutorService var2) {
      super(var2);
      this.entityTypeInfo = var1;
   }

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

   protected final <U> CompletableFuture<List<U>> executeAsyncMultiple(DataFetchingEnvironment var1, Callable<List<U>> var2) {
      return this.<List>executeAsync(var1, var2).thenApply(var0 -> {
         try {
            if (var0 != null) {
               return (List<U>)var0;
            }
         } catch (RuntimeException var1x) {
            throw c(var1x);
         }

         return Collections.emptyList();
      });
   }

   protected final <U> CompletableFuture<U> executeAsync(DataFetchingEnvironment var1, Callable<U> var2) {
      GraphQLContext var3 = var1.getGraphQlContext();
      String[] var6 = i;
      String var4 = (String)var3.get(var6[0]);
      Subject var5 = new Subject();
      var5.getPrincipals().add((Principal)var3.get(var6[1]));
      return CompletableFuture.supplyAsync(
         () -> Subject.callAs(
            var5,
            () -> {
               try {
                  return (U)RemoteUtils.callWithConnectionInfo(var4, null, var2);
               } catch (RuntimeException var6x) {
                  throw var6x;
               } catch (Exception var7) {
                  Exception var4xx = var7;

                  try {
                     this.getLogger()
                        .log(
                           Level.INFO,
                           ExceptionUtils.getDebugException(var4xx),
                           () -> GatewayEntityError.getReadQueryErrorMessage(this.entityTypeInfo.getEntityType(), var4xx)
                        );
                     if (this.getQueryOptionsSupplier(var1).isThrowQueryErrorsStrategyEnabled()) {
                        throw new RuntimeException(GatewayEntityError.getReadQueryErrorMessage(this.entityTypeInfo.getEntityType(), var4xx));
                     } else {
                        return null;
                     }
                  } catch (RuntimeException var5x) {
                     throw c(var5x);
                  }
               }
            }
         ),
         this.executorService
      );
   }

   protected final FilePartSupplier getFilePartSupplier(DataFetchingEnvironment var1) {
      return (FilePartSupplier)var1.getGraphQlContext().get(i[4]);
   }

   protected final <T> CompletableFuture<List<T>> doProcessMultipleByFilters(
      DataFetchingEnvironment var1, CompletableFuture<List<T>> var2, List<EntityFilterInput> var3, Class<?> var4
   ) {
      try {
         if (Util.isEmpty(var3)) {
            return var2;
         }
      } catch (Exception var8) {
         throw c(var8);
      }

      EntityFilterPredicate var5;
      try {
         var5 = EntityFilterPredicateBuilder.INSTANCE.build(var3, new PojoEntityFieldEvaluator(var4, var1));
      } catch (Exception var7) {
         throw new RuntimeException(i[3] + ExceptionUtils.getMessageWithCause(var7), var7);
      }

      return var2.thenApply(var1x -> var1x.stream().filter(var5::test).toList());
   }

   protected <ET extends Entity> Collection<ET> findMultipleByDependencies(
      Collection<Dependency> var1, DependentEntityCacheProvider.DependentEntityCache var2, Function<DependentEntity, ET> var3
   ) {
      ArrayList var4 = new ArrayList();

      for (Dependency var6 : var1) {
         DependentEntity var7 = (DependentEntity)var6.getDependent();
         var4.add(var2.get(var7, () -> (Entity)var3.apply(var7)));
      }

      return var4;
   }

   protected final CompletableFuture<PublishedServiceDTO> getHardwiredService(
      DataFetchingEnvironment param1, Goid param2, @NotNull ServiceManager param3, @NotNull ServiceDocumentHelper param4
   ) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 2
      // 01: ifnull 15
      // 04: getstatic com/l7tech/objectmodel/Goid.DEFAULT_GOID Lcom/l7tech/objectmodel/Goid;
      // 07: aload 2
      // 08: invokevirtual com/l7tech/objectmodel/Goid.equals (Ljava/lang/Object;)Z
      // 0b: ifeq 1e
      // 0e: goto 15
      // 11: invokestatic com/l7tech/external/assertions/gatewaygraphql/server/resolver/query/BasicGraphQLQueryResolver.c (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 14: athrow
      // 15: aconst_null
      // 16: invokestatic java/util/concurrent/CompletableFuture.completedFuture (Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture;
      // 19: areturn
      // 1a: invokestatic com/l7tech/external/assertions/gatewaygraphql/server/resolver/query/BasicGraphQLQueryResolver.c (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1d: athrow
      // 1e: aload 0
      // 1f: aload 1
      // 20: aload 3
      // 21: aload 2
      // 22: aload 4
      // 24: invokedynamic call (Lcom/l7tech/server/service/ServiceManager;Lcom/l7tech/objectmodel/Goid;Lcom/l7tech/external/assertions/gatewaygraphql/server/resolver/helper/ServiceDocumentHelper;)Ljava/util/concurrent/Callable; bsm=java/lang/invoke/LambdaMetafactory.metafactory (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; args=[ ()Ljava/lang/Object;, com/l7tech/external/assertions/gatewaygraphql/server/resolver/query/BasicGraphQLQueryResolver.lambda$getHardwiredService$6 (Lcom/l7tech/server/service/ServiceManager;Lcom/l7tech/objectmodel/Goid;Lcom/l7tech/external/assertions/gatewaygraphql/server/resolver/helper/ServiceDocumentHelper;)Lcom/l7tech/external/assertions/gatewaygraphql/server/data/PublishedServiceDTO;, ()Lcom/l7tech/external/assertions/gatewaygraphql/server/data/PublishedServiceDTO; ]
      // 29: invokevirtual com/l7tech/external/assertions/gatewaygraphql/server/resolver/query/BasicGraphQLQueryResolver.executeAsyncQuietly (Lgraphql/schema/DataFetchingEnvironment;Ljava/util/concurrent/Callable;)Ljava/util/concurrent/CompletableFuture;
      // 2c: areturn
      // try (0 -> 6): 7 java/lang/RuntimeException
      // try (2 -> 12): 12 java/lang/RuntimeException
   }

   @Generated
   public EntityTypeInfo getEntityTypeInfo() {
      return this.entityTypeInfo;
   }

   static {
      String[] var5 = new String[5];
      int var3 = 0;
      String var2 = "9g\u001ddQ_3/f\u0002nVI\b*w\u0004cpI\u00179!\u0003c\u0002oRS\u0000.fPx@H\u0004\"a\u0015+\r\u0019W8+PeJNR-m\u0005eA";
      int var4 = "9g\u001ddQ_3/f\u0002nVI\b*w\u0004cpI\u00179!\u0003c\u0002oRS\u0000.fPx@H\u0004\"a\u0015+\r\u0019W8+PeJNR-m\u0005eA".length();
      char var1 = '\r';
      int var7 = -1;

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

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

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

                  var2 = "=S)Wpnb\u000f]`Y`c.\u001f\u00124Sp*$\u0012^4^gyn[\u0010\u001d[,^Ek0\u000fa5Kef+\u001e@";
                  var4 = "=S)Wpnb\u000f]`Y`c.\u001f\u00124Sp*$\u0012^4^gyn[\u0010\u001d[,^Ek0\u000fa5Kef+\u001e@".length();
                  var1 = 29;
                  var7 = -1;
            }

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

   private static Exception c(Exception var0) {
      return var0;
   }

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

      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 -> 33;
            case 1 -> 104;
            case 2 -> 26;
            case 3 -> 97;
            case 4 -> 79;
            case 5 -> 80;
            default -> 24;
         });
      }

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