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

import com.l7tech.external.assertions.gatewaygraphql.EntityTypeInfo;
import com.l7tech.external.assertions.gatewaygraphql.server.data.EntityMappingInstruction;
import com.l7tech.external.assertions.gatewaygraphql.server.data.InternalGroupDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.query.IdpResolverHelper;
import com.l7tech.identity.IdentityProviderType;
import com.l7tech.identity.internal.InternalGroup;
import com.l7tech.identity.internal.InternalUser;
import com.l7tech.objectmodel.FindException;
import com.l7tech.server.identity.internal.InternalGroupManager;
import com.l7tech.server.identity.internal.InternalIdentityProvider;
import graphql.schema.DataFetchingEnvironment;
import java.util.List;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.transaction.PlatformTransactionManager;

public class InternalIdpGroupMutationResolver
   extends IdpGroupMutationResolver<InternalIdentityProvider, InternalGroup, InternalUser, InternalGroupDTO, InternalGroupDTO.InternalGroupInput> {
   private final InternalIdentityProvider c;

   public InternalIdpGroupMutationResolver(PlatformTransactionManager var1, BeanFactory var2, IdpResolverHelper var3) {
      super(EntityTypeInfo.INTERNAL_GROUP, var1, var3, IdentityProviderType.INTERNAL);
      this.c = var3.internalIdp();
   }

   public InternalGroupDTO.InternalGroupsPayload setInternalGroups(List<InternalGroupDTO.InternalGroupInput> var1, DataFetchingEnvironment var2) {
      InternalGroupDTO.InternalGroupsPayload var3 = new InternalGroupDTO.InternalGroupsPayload();
      this.transformNoDefEntityMappings(var1, var2);
      return var1.isEmpty() ? var3 : this.execute(var2, (var3x, var4) -> {
         var1.forEach(var4x -> this.doUpsertSilently(var4x, var3x, var3, var4));
         return var3;
      });
   }

   public InternalGroupDTO.InternalGroupsPayload deleteInternalGroups(List<String> var1, DataFetchingEnvironment var2) {
      InternalGroupDTO.InternalGroupsPayload var3 = new InternalGroupDTO.InternalGroupsPayload();
      return var1.isEmpty() ? var3 : this.execute(var2, (var3x, var4) -> {
         var1.forEach(var4x -> this.doDeleteSilently(null, var4x, var3x, var3, var4));
         return var3;
      });
   }

   protected InternalGroup toEntity(InternalIdentityProvider var1, InternalGroupDTO.InternalGroupInput var2) {
      return new InternalGroup(var2.getName());
   }

   protected InternalGroupDTO toEntityDTO(InternalIdentityProvider var1, InternalGroup var2) {
      return new InternalGroupDTO(var2, var1, this.idpHelper);
   }

   protected InternalGroupDTO.InternalGroupInput toEntityInput(EntityMappingInstruction var1) {
      InternalGroupDTO.InternalGroupInput var2 = new InternalGroupDTO.InternalGroupInput();
      var2.setName(var1.getIdentityValue());
      return var2;
   }

   protected void setEntity(InternalIdentityProvider var1, InternalGroupDTO.InternalGroupInput var2, InternalGroup var3) {
      var3.setDescription(var2.getDescription());
   }

   protected InternalGroup doFind(InternalIdentityProvider var1, InternalGroupDTO.InternalGroupInput var2) throws FindException {
      try {
         if (var1 != null) {
            return (InternalGroup)((InternalGroupManager)var1.getGroupManager()).findByName(var2.getName());
         }
      } catch (FindException var3) {
         throw a(var3);
      }

      return null;
   }

   protected InternalIdentityProvider doFindIdp(InternalGroupDTO.InternalGroupInput var1) {
      return this.c;
   }

   protected InternalIdentityProvider doFindIdp(String var1) {
      return this.c;
   }

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