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

import com.l7tech.external.assertions.gatewaygraphql.EntityTypeInfo;
import com.l7tech.external.assertions.gatewaygraphql.server.data.KeyDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.PolicyDependency;
import com.l7tech.external.assertions.gatewaygraphql.server.input.EntityFilterInput;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.entityref.SsgKeyRefResolver;
import com.l7tech.external.assertions.gatewaygraphql.server.util.AssertionLocalBeanFactory;
import com.l7tech.external.assertions.gatewaygraphql.server.util.Util;
import com.l7tech.gateway.common.security.keystore.SsgKeyEntry;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.SsgKeyHeader;
import com.l7tech.server.DefaultKey;
import com.l7tech.server.search.objects.DependentEntity;
import com.l7tech.server.security.keystore.SsgKeyFinder;
import com.l7tech.server.security.keystore.SsgKeyStoreManager;
import graphql.kickstart.tools.GraphQLResolver;
import graphql.schema.DataFetchingEnvironment;
import java.security.KeyStoreException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.logging.Logger;
import lombok.Generated;
import org.springframework.beans.factory.BeanFactory;

public class SsgKeyQueryResolver extends EntityAwareGraphQLQueryResolver<SsgKeyEntry, KeyDTO> {
   @Generated
   private static final Logger c;
   private final SsgKeyStoreManager d;
   private final DefaultKey e;
   private static final String[] f;

   public SsgKeyQueryResolver(ExecutorService var1, BeanFactory var2, AssertionLocalBeanFactory var3) {
      super(EntityTypeInfo.KEY, var1);
      String[] var4 = f;
      this.d = (SsgKeyStoreManager)var2.getBean(var4[3]);
      this.e = (DefaultKey)var2.getBean(var4[2]);
      var3.addResolver(new SsgKeyQueryResolver.SsgKeyPolicyDependencyResolver());
      var3.addRefResolver(new SsgKeyRefResolver(this.d));
   }

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

   public CompletableFuture<List<KeyDTO>> keys(DataFetchingEnvironment var1) {
      return this.executeAsyncMultiple(var1, () -> this.doFindAll(var1));
   }

   public CompletableFuture<KeyDTO> keyByGoid(String var1, DataFetchingEnvironment var2) {
      return this.keyByAlias(var1, var2);
   }

   public CompletableFuture<KeyDTO> keyByAlias(String var1, DataFetchingEnvironment var2) {
      return this.executeAsync(var2, () -> this.doFindByName(var2, var1));
   }

   public CompletableFuture<List<KeyDTO>> keysByFilters(List<EntityFilterInput> var1, DataFetchingEnvironment var2) {
      return this.doProcessMultipleByFilters(var2, this.keys(var2), var1, KeyDTO.class);
   }

   protected KeyDTO toEntityDTO(SsgKeyEntry var1) {
      return new KeyDTO(var1, this.e);
   }

   protected SsgKeyEntry findByName(String var1) throws FindException {
      String[] var2 = Util.tokenizeKeyAlias(var1);
      return this.a(Goid.parseGoid(var2[0]), var2[1]);
   }

   protected SsgKeyEntry findByGoid(Goid var1) throws FindException {
      return null;
   }

   @Override
   protected Collection<SsgKeyEntry> findAll() throws FindException {
      ArrayList var1 = new ArrayList();

      try {
         for (SsgKeyFinder var3 : this.d.findAll()) {
            for (String var5 : var3.getAliases()) {
               SsgKeyEntry var6 = this.a(var3.getGoid(), var5);
               var1.add(var6);
            }
         }

         return var1;
      } catch (KeyStoreException var7) {
         throw new IllegalStateException(f[1], var7);
      }
   }

   protected SsgKeyEntry findByDependent(DependentEntity var1) throws FindException {
      SsgKeyHeader var2 = (SsgKeyHeader)var1.getEntityHeader();
      return this.a(var2.getGoid(), var2.getAlias());
   }

   private SsgKeyEntry a(Goid var1, String var2) throws FindException {
      try {
         return this.d.lookupKeyByKeyAlias(var2, var1);
      } catch (KeyStoreException var4) {
         throw new IllegalStateException(f[0], var4);
      }
   }

   static {
      String[] var5 = new String[4];
      int var3 = 0;
      String var2 = "r~\u001cheb<@pUvern]z\u0003a myM\u0017r~\u001cheb<@pUvern]z\u0003a myMl";
      int var4 = "r~\u001cheb<@pUvern]z\u0003a myM\u0017r~\u001cheb<@pUvern]z\u0003a myMl".length();
      char var1 = 22;
      int var7 = -1;

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

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

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

                  var2 = " \nc\u0015\u0005\u001a\u0018\u000f\n|\u00127\u001cb?\u0015\u000f?0\u0000w\u0011=\u0017\u0002%\b`\u0006";
                  var4 = " \nc\u0015\u0005\u001a\u0018\u000f\n|\u00127\u001cb?\u0015\u000f?0\u0000w\u0011=\u0017\u0002%\b`\u0006".length();
                  var1 = '\n';
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String c(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 -> 73;
            case 1 -> 98;
            case 2 -> 8;
            case 3 -> 121;
            case 4 -> 125;
            case 5 -> 123;
            default -> 97;
         });
      }

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

   public class SsgKeyPolicyDependencyResolver implements GraphQLResolver<PolicyDependency> {
      public CompletableFuture<List<KeyDTO>> getKeys(PolicyDependency var1, DataFetchingEnvironment var2) {
         return SsgKeyQueryResolver.this.executeAsyncQuietly(
            var2,
            () -> {
               DependentEntityCacheProvider.DependentEntityCache var3 = SsgKeyQueryResolver.this.getDependentEntityCache(
                  var2, SsgKeyQueryResolver.this.entityTypeInfo.getEntityType()
               );
               return SsgKeyQueryResolver.this.doProcessMultiple(var2, SsgKeyQueryResolver.this.findMultipleByDependencies(var1.getKeys(), var3));
            },
            Collections::emptyList
         );
      }
   }
}
