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

import com.l7tech.external.assertions.gatewaygraphql.EntityTypeInfo;
import com.l7tech.external.assertions.gatewaygraphql.server.data.GroupRefDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.IdpDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.IdpRefDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.UserRefDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.input.EntityFilterInput;
import com.l7tech.external.assertions.gatewaygraphql.server.util.AssertionLocalBeanFactory;
import com.l7tech.identity.Group;
import com.l7tech.identity.IdentityProvider;
import com.l7tech.identity.User;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.IdentityHeader;
import graphql.schema.DataFetchingEnvironment;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import org.springframework.beans.factory.BeanFactory;

public class UserGroupQueryResolver extends BasicGraphQLQueryResolver {
   private final IdpResolverHelper c;

   public UserGroupQueryResolver(ExecutorService var1, BeanFactory var2, AssertionLocalBeanFactory var3) {
      super(EntityTypeInfo.USER, var1);
      this.c = var3.getRequired(IdpResolverHelper.class);
   }

   public CompletableFuture<List<IdpRefDTO>> idps(DataFetchingEnvironment var1) {
      ArrayList var2 = new ArrayList();
      return this.executeAsyncMultiple(var1, () -> {
         this.c.idps(var0 -> true).forEach(var1xx -> var2.add(new IdpRefDTO((IdentityProvider<?, ?, ?, ?>)var1xx)));
         return var2;
      });
   }

   public CompletableFuture<List<IdpRefDTO>> idpsByName(String var1, DataFetchingEnvironment var2) {
      ArrayList var3 = new ArrayList();
      return this.executeAsyncMultiple(var2, () -> {
         this.c.idps(var1xx -> var1.equals(var1xx.getConfig().getName())).forEach(var1xx -> var3.add(new IdpRefDTO((IdentityProvider<?, ?, ?, ?>)var1xx)));
         return var3;
      });
   }

   public CompletableFuture<IdpRefDTO> idpByGoid(String var1, DataFetchingEnvironment var2) {
      return this.executeAsync(var2, () -> {
         IdentityProvider var2x = this.c.idpByGoid(Goid.parseGoid(var1));

         try {
            if (var2x != null) {
               return new IdpRefDTO(var2x);
            }
         } catch (Exception var3) {
            throw a(var3);
         }

         return null;
      });
   }

   public CompletableFuture<List<UserRefDTO>> idpUsers(IdpDTO.IdpType var1, String var2, DataFetchingEnvironment var3) {
      ArrayList var4 = new ArrayList();
      return this.executeAsyncMultiple(var3, () -> {
         IdentityProvider var4x = this.c.findIdp(var1, var2);
         List var5 = this.c.idpUsers(var4x);
         var5.forEach(var2xx -> var4.add(new UserRefDTO(var2xx, var4x)));
         return var4;
      });
   }

   public CompletableFuture<UserRefDTO> idpUserByLogin(IdpDTO.IdpType var1, String var2, String var3, DataFetchingEnvironment var4) {
      return this.executeAsync(var4, () -> {
         IdentityProvider var4x = this.c.findIdp(var1, var2);
         User var5 = this.c.userByLogin(var4x, var3);

         try {
            if (var5 != null) {
               return new UserRefDTO(var5, var4x);
            }
         } catch (Exception var6) {
            throw a(var6);
         }

         return null;
      });
   }

   public CompletableFuture<UserRefDTO> idpUserBySubjectDn(IdpDTO.IdpType var1, String var2, String var3, DataFetchingEnvironment var4) {
      return this.executeAsync(var4, () -> {
         IdentityProvider var4x = this.c.findIdp(var1, var2);
         User var5 = this.c.userBySubjectDn(var4x, var3);

         try {
            if (var5 != null) {
               return new UserRefDTO(var5, var4x);
            }
         } catch (Exception var6) {
            throw a(var6);
         }

         return null;
      });
   }

   public CompletableFuture<List<GroupRefDTO>> idpGroups(IdpDTO.IdpType var1, String var2, DataFetchingEnvironment var3) {
      ArrayList var4 = new ArrayList();
      return this.executeAsyncMultiple(var3, () -> {
         IdentityProvider var4x = this.c.findIdp(var1, var2);
         List var5 = this.c.idpGroups(var4x);
         var5.forEach(var2xx -> var4.add(new GroupRefDTO(var2xx, var4x)));
         return var4;
      });
   }

   public CompletableFuture<GroupRefDTO> idpGroupByName(IdpDTO.IdpType var1, String var2, String var3, DataFetchingEnvironment var4) {
      return this.executeAsync(var4, () -> {
         IdentityProvider var4x = this.c.findIdp(var1, var2);
         Group var5 = this.c.groupByName(var4x, var3);

         try {
            if (var5 != null) {
               return new GroupRefDTO(var5, var4x);
            }
         } catch (Exception var6) {
            throw a(var6);
         }

         return null;
      });
   }

   public CompletableFuture<GroupRefDTO> idpGroupBySubjectDn(IdpDTO.IdpType var1, String var2, String var3, DataFetchingEnvironment var4) {
      return this.executeAsync(var4, () -> {
         IdentityProvider var4x = this.c.findIdp(var1, var2);
         Group var5 = this.c.groupBySubjectDn(var4x, var3);

         try {
            if (var5 != null) {
               return new GroupRefDTO(var5, var4x);
            }
         } catch (Exception var6) {
            throw a(var6);
         }

         return null;
      });
   }

   public CompletableFuture<List<UserRefDTO>> idpUsersByFilters(IdpDTO.IdpType var1, String var2, List<EntityFilterInput> var3, DataFetchingEnvironment var4) {
      return this.doProcessMultipleByFilters(var4, this.a(var1, var2, var4), var3, UserRefDTO.class);
   }

   public CompletableFuture<List<GroupRefDTO>> idpGroupsByFilters(IdpDTO.IdpType var1, String var2, List<EntityFilterInput> var3, DataFetchingEnvironment var4) {
      return this.doProcessMultipleByFilters(var4, this.idpGroups(var1, var2, var4), var3, GroupRefDTO.class);
   }

   private CompletableFuture<List<UserRefDTO>> a(IdpDTO.IdpType var1, String var2, DataFetchingEnvironment var3) {
      return this.executeAsyncMultiple(var3, () -> {
         IdentityProvider var3x = this.c.findIdp(var1, var2);
         List var4 = this.c.idpUserHeaders(var3x);
         ArrayList var5 = new ArrayList();

         for (IdentityHeader var7 : var4) {
            User var8 = this.c.idpUserByHeader(var3x, var7);

            try {
               if (var8 != null) {
                  var5.add(new UserRefDTO(var8, var3x, var7));
               }
            } catch (Exception var9) {
               throw a(var9);
            }
         }

         return var5;
      });
   }

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