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.PolicyBackedIdpDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.EntityResolver;
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.external.PolicyBackedIdentityProviderConfig;
import com.l7tech.objectmodel.FindException;
import com.l7tech.server.identity.external.PolicyBackedIdentityProvider;
import com.l7tech.server.policy.PolicyManager;
import com.l7tech.server.security.rbac.RoleManager;
import graphql.schema.DataFetchingEnvironment;
import java.util.List;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.transaction.PlatformTransactionManager;

public class PolicyBackedIdpMutationResolver
   extends IdpMutationResolver<PolicyBackedIdentityProvider, PolicyBackedIdentityProviderConfig, PolicyBackedIdpDTO, PolicyBackedIdpDTO.PolicyBackedIdpInput> {
   private final RoleManager b;
   private final PolicyManager c;
   private static final String[] d;

   public PolicyBackedIdpMutationResolver(PlatformTransactionManager var1, BeanFactory var2, AssertionLocalBeanFactory var3) {
      super(EntityTypeInfo.POLICY_BACKED_IDP, var1, var2, var3.getRequired(IdpResolverHelper.class), IdentityProviderType.POLICY_BACKED);
      String[] var4 = d;
      this.c = (PolicyManager)var2.getBean(var4[0]);
      this.b = (RoleManager)var2.getBean(var4[2]);
   }

   public PolicyBackedIdpDTO.PolicyBackedIdpsPayload setPolicyBackedIdps(List<PolicyBackedIdpDTO.PolicyBackedIdpInput> var1, DataFetchingEnvironment var2) {
      PolicyBackedIdpDTO.PolicyBackedIdpsPayload var3 = new PolicyBackedIdpDTO.PolicyBackedIdpsPayload();
      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 PolicyBackedIdpDTO.PolicyBackedIdpsPayload deletePolicyBackedIdps(List<String> var1, DataFetchingEnvironment var2) {
      PolicyBackedIdpDTO.PolicyBackedIdpsPayload var3 = new PolicyBackedIdpDTO.PolicyBackedIdpsPayload();
      return var1.isEmpty() ? var3 : this.execute(var2, (var3x, var4) -> {
         var1.forEach(var4x -> this.doDeleteSilently(var4x, var3x, var3, var4));
         return var3;
      });
   }

   protected PolicyBackedIdentityProviderConfig toEntity(PolicyBackedIdpDTO.PolicyBackedIdpInput var1) {
      return new PolicyBackedIdentityProviderConfig();
   }

   protected PolicyBackedIdpDTO toEntityDTO(PolicyBackedIdentityProviderConfig var1) {
      try {
         return new PolicyBackedIdpDTO(var1, this.idpHelper);
      } catch (Throwable var3) {
         throw var3;
      }
   }

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

   protected void setEntity(PolicyBackedIdpDTO.PolicyBackedIdpInput var1, PolicyBackedIdentityProviderConfig var2) {
      try {
         try {
            var2.setName(var1.getName());
            var2.setPolicyId(EntityResolver.toEntityGoidByName(this.c, var1.getAuthPolicyName()));
            if (var1.getDefaultRoleName() != null) {
               var2.setDefaultRoleId(EntityResolver.toEntityGoidByName(this.b, var1.getDefaultRoleName()));
            }
         } catch (Throwable var5) {
            throw b(var5);
         }

         List var3 = var1.getProperties();

         try {
            if (var3 != null) {
               var3.stream().filter(var0 -> d[1].equals(var0.getName())).forEach(var1x -> var2.setAdminEnabled(Boolean.parseBoolean(var1x.getValue())));
            }
         } catch (Throwable var4) {
            throw b(var4);
         }
      } catch (Throwable var6) {
         throw var6;
      }
   }

   protected void resetEntitySelectively(PolicyBackedIdpDTO.PolicyBackedIdpInput var1, PolicyBackedIdentityProviderConfig var2) {
      var2.setDefaultRoleId(null);
      var2.setAdminEnabled(false);
   }

   protected PolicyBackedIdentityProviderConfig doFind(PolicyBackedIdpDTO.PolicyBackedIdpInput var1) throws FindException {
      return this.doFindBy(var1.getName());
   }

   private static Throwable b(Throwable var0) {
      return var0;
   }

   static {
      String[] var5 = new String[3];
      int var3 = 0;
      String var2 = "$x\u001b)4\u0004\u00195y\u0016'2\u000f\f5s\u001a)98:5u\u001b%3\u000b&x\u001b%\u001a\u001c:5p\u00122";
      int var4 = "$x\u001b)4\u0004\u00195y\u0016'2\u000f\f5s\u001a)98:5u\u001b%3\u000b&x\u001b%\u001a\u001c:5p\u00122".length();
      char var1 = '\r';
      int var0 = -1;

      while (true) {
         String var10002 = c(36, b(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            d = var5;
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

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

      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 -> 112;
            case 1 -> 51;
            case 2 -> 83;
            case 3 -> 100;
            case 4 -> 115;
            case 5 -> 89;
            default -> 112;
         });
      }

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