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.FipDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.FipGroupDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.FipUserDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.query.IdpResolverHelper;
import com.l7tech.external.assertions.gatewaygraphql.server.util.AssertionLocalBeanFactory;
import com.l7tech.identity.IdentityProviderType;
import com.l7tech.identity.fed.FederatedIdentityProviderConfig;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.identity.fed.FederatedIdentityProvider;
import graphql.schema.DataFetchingEnvironment;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.transaction.PlatformTransactionManager;

@Deprecated
public class FederatedIdpMutationResolver extends IdpMutationResolver<FederatedIdentityProvider, FederatedIdentityProviderConfig, FipDTO, FipDTO.FipInput> {
   private final FederatedIdpUserMutationResolver b;
   private final FederatedIdpGroupMutationResolver c;

   public FederatedIdpMutationResolver(PlatformTransactionManager var1, BeanFactory var2, AssertionLocalBeanFactory var3) {
      super(EntityTypeInfo.FEDERATED_IDP, var1, var2, var3.getRequired(IdpResolverHelper.class), IdentityProviderType.FEDERATED);
      IdpResolverHelper var4 = var3.getRequired(IdpResolverHelper.class);
      this.b = new FederatedIdpUserMutationResolver(var1, var2, var4);
      this.c = new FederatedIdpGroupMutationResolver(var1, var2, var4);
   }

   public FipDTO.FipsPayload setFips(List<FipDTO.FipInput> var1, DataFetchingEnvironment var2) {
      FipDTO.FipsPayload var3 = new FipDTO.FipsPayload();
      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 FipDTO.FipsPayload deleteFips(List<String> var1, DataFetchingEnvironment var2) {
      FipDTO.FipsPayload var3 = new FipDTO.FipsPayload();
      return var1.isEmpty() ? var3 : this.execute(var2, (var3x, var4) -> {
         var1.forEach(var4x -> this.doDeleteSilently(var4x, var3x, var3, var4));
         return var3;
      });
   }

   public FipUserDTO.FipUsersPayload setFipUsers(List<FipUserDTO.FipUserInput> var1, DataFetchingEnvironment var2) {
      return this.b.setFipUsers(var1, var2);
   }

   public FipUserDTO.FipUsersPayload deleteFipUsers(String var1, List<String> var2, DataFetchingEnvironment var3) {
      return this.b.deleteFipUsers(var1, var2, var3);
   }

   public FipGroupDTO.FipGroupsPayload setFipGroups(List<FipGroupDTO.FipGroupInput> var1, DataFetchingEnvironment var2) {
      return this.c.setFipGroups(var1, var2);
   }

   public FipGroupDTO.FipGroupsPayload deleteFipGroups(String var1, List<String> var2, DataFetchingEnvironment var3) {
      return this.c.deleteFipGroups(var1, var2, var3);
   }

   protected FederatedIdentityProviderConfig toEntity(FipDTO.FipInput var1) {
      return new FederatedIdentityProviderConfig();
   }

   protected FipDTO toEntityDTO(FederatedIdentityProviderConfig var1) {
      return new FipDTO(var1, this.idpHelper);
   }

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

   protected void setEntity(FipDTO.FipInput var1, FederatedIdentityProviderConfig var2) {
      var2.setName(var1.getName());
      var2.setSamlSupported(var1.isEnableCredentialTypeSaml());
      var2.setX509Supported(var1.isEnableCredentialTypeX509());
      var2.setCertificateValidationType(var1.getCertificateValidation());
      if (var1.getCertificateReferences() != null) {
         var2.setTrustedCertGoids(this.a(var1.getCertificateReferences()).toArray(Goid[]::new));
      }
   }

   protected FederatedIdentityProviderConfig doFind(FipDTO.FipInput var1) throws FindException {
      return this.doFindBy(var1.getName());
   }

   private List<Goid> a(List<FipDTO.FipCertInput> var1) {
      ArrayList var2 = new ArrayList();

      for (FipDTO.FipCertInput var4 : var1) {
         this.idpHelper.certsForThumbprint(var4.getDBFriendlyThumbprint()).forEach(var1x -> var2.add(var1x.getGoid()));
      }

      return var2;
   }
}
