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

import com.l7tech.external.assertions.gatewaygraphql.EntityTypeInfo;
import com.l7tech.external.assertions.gatewaygraphql.server.data.EntityMappingAction;
import com.l7tech.external.assertions.gatewaygraphql.server.data.EntityMappingInstruction;
import com.l7tech.external.assertions.gatewaygraphql.server.data.EntityMutationStatus;
import com.l7tech.external.assertions.gatewaygraphql.server.data.IdpEntityDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.IdpEntityMutationsPayload;
import com.l7tech.external.assertions.gatewaygraphql.server.input.IdpEntityInput;
import com.l7tech.identity.Identity;
import com.l7tech.identity.IdentityProvider;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.ObjectModelException;
import graphql.schema.DataFetchingEnvironment;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.Nullable;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;

public abstract class IdpMemberAwareMutationResolver<IDP extends IdentityProvider, IDPUG extends Identity, IDPUGO extends IdpEntityDTO<IDP>, IDPUGI extends IdpEntityInput>
   extends BasicGraphQLMutationResolver {
   private static final String b;
   private static final String[] f;

   protected IdpMemberAwareMutationResolver(EntityTypeInfo var1, PlatformTransactionManager var2) {
      super(var1, var2);
   }

   protected abstract IDPUG toEntity(IDP var1, IDPUGI var2);

   protected abstract IDPUGO toEntityDTO(IDP var1, IDPUG var2);

   protected abstract IDPUGI toEntityInput(EntityMappingInstruction var1);

   protected final EntityMappingInstruction toEntityMappingInstruction(String var1, Object var2) {
      EntityMappingInstruction var3 = new EntityMappingInstruction(EntityMappingAction.NEW_OR_UPDATE);
      var3.setSource(this.entityTypeInfo.getIdentityKey(), var2);
      var3.setIdentityValue((String)var2);
      var3.setSource(f[0], var1);
      return var3;
   }

   protected Map<String, Object> toRawEntity(@Nullable IDPUGI var1) {
      if (var1 != null) {
         HashMap var2 = new HashMap();
         var2.put(this.entityTypeInfo.getIdentityKey(), var1.getIdentityValue());
         return var2;
      } else {
         return null;
      }
   }

   protected abstract void setEntity(IDP var1, IDPUGI var2, IDPUG var3);

   protected void setEntityConditionally(IDP var1, IDPUGI var2, IDPUG var3) {
   }

   protected void resetEntitySelectively(IDP var1, IDPUGI var2, IDPUG var3) {
   }

   protected void resetEntityConditionally(IDP var1, IDPUGI var2, IDPUG var3) {
   }

   protected abstract IDPUG doFind(IDP var1, IDPUGI var2) throws FindException;

   protected abstract IDP doFindIdp(IDPUGI var1) throws FindException;

   protected final IDP doFindIdp(IDPUGI param1, EntityMappingInstruction param2) throws FindException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: aload 1
      // 02: invokevirtual com/l7tech/external/assertions/gatewaygraphql/server/resolver/mutation/IdpMemberAwareMutationResolver.doFindIdp (Lcom/l7tech/external/assertions/gatewaygraphql/server/input/IdpEntityInput;)Lcom/l7tech/identity/IdentityProvider;
      // 05: astore 3
      // 06: aload 3
      // 07: ifnonnull 3c
      // 0a: getstatic com/l7tech/external/assertions/gatewaygraphql/server/data/EntityMappingAction.DELETE Lcom/l7tech/external/assertions/gatewaygraphql/server/data/EntityMappingAction;
      // 0d: aload 2
      // 0e: invokevirtual com/l7tech/external/assertions/gatewaygraphql/server/data/EntityMappingInstruction.getAction ()Lcom/l7tech/external/assertions/gatewaygraphql/server/data/EntityMappingAction;
      // 11: invokevirtual com/l7tech/external/assertions/gatewaygraphql/server/data/EntityMappingAction.equals (Ljava/lang/Object;)Z
      // 14: ifeq 2f
      // 17: goto 1e
      // 1a: invokestatic com/l7tech/external/assertions/gatewaygraphql/server/resolver/mutation/IdpMemberAwareMutationResolver.b (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 1d: athrow
      // 1e: new com/l7tech/external/assertions/gatewaygraphql/server/error/NoMutationException
      // 21: dup
      // 22: getstatic com/l7tech/external/assertions/gatewaygraphql/server/resolver/mutation/IdpMemberAwareMutationResolver.f [Ljava/lang/String;
      // 25: bipush 1
      // 26: aaload
      // 27: invokespecial com/l7tech/external/assertions/gatewaygraphql/server/error/NoMutationException.<init> (Ljava/lang/String;)V
      // 2a: athrow
      // 2b: invokestatic com/l7tech/external/assertions/gatewaygraphql/server/resolver/mutation/IdpMemberAwareMutationResolver.b (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 2e: athrow
      // 2f: new java/lang/IllegalStateException
      // 32: dup
      // 33: getstatic com/l7tech/external/assertions/gatewaygraphql/server/resolver/mutation/IdpMemberAwareMutationResolver.f [Ljava/lang/String;
      // 36: bipush 3
      // 37: aaload
      // 38: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // 3b: athrow
      // 3c: aload 3
      // 3d: areturn
      // try (4 -> 11): 12 com/l7tech/objectmodel/FindException
      // try (6 -> 21): 21 com/l7tech/objectmodel/FindException
   }

   protected boolean isDeletable(IDPUG var1) {
      return true;
   }

   protected abstract IDPUGO doCreate(IDP var1, IDPUGI var2) throws ObjectModelException;

   protected abstract IDPUGO doUpdate(IDP var1, IDPUGI var2, IDPUG var3) throws ObjectModelException;

   protected abstract IDPUGO doDelete(IDP var1, IDPUGI var2, IDPUG var3) throws ObjectModelException;

   protected final void doUpsert(IDP var1, IDPUGI var2, EntityMappingInstruction var3, IdpEntityMutationsPayload<IDP, IDPUGO> var4, TransactionStatus var5) throws ObjectModelException {
      EntityMappingAction var6 = var3.getAction();
      Identity var7 = this.doFind((IDP)var1, (IDPUGI)var2);

      label58: {
         label59: {
            label36: {
               try {
                  var2.setFullInput(true);
                  if (var7 == null) {
                     this.failOnNewIfRequired(var3);
                     switch (d.a[var6.ordinal()]) {
                        case 1:
                        case 2:
                        case 3:
                           break label58;
                        case 4:
                           break label59;
                        default:
                           break label36;
                     }
                  }
               } catch (ObjectModelException var10) {
                  throw b(var10);
               }

               this.failOnExistingIfRequired(var3);
               switch (d.a[var3.getAction().ordinal()]) {
                  case 1:
                     this.ignoreEntityActionIfRequired(var2);
                     IdpEntityDTO var12 = this.doUpdate((IDP)var1, (IDPUGI)var2, (IDPUG)var7);
                     var5.flush();
                     var4.add(var6, EntityMutationStatus.UPDATED, this.toRawEntity((IDPUGI)var2), var12);
                     return;
                  case 2:
                     var4.add(var6, EntityMutationStatus.USED_EXISTING, this.toRawEntity((IDPUGI)var2), this.toEntityDTO((IDP)var1, (IDPUG)var7));
                     return;
                  case 3:
                     this.ignoreEntityActionIfRequired(var2);
                     this.makeEntityInputCreateNewMutationReady(var2, var7);
                     IdpEntityDTO var11 = this.doCreate((IDP)var1, (IDPUGI)var2);
                     var5.flush();
                     var4.add(var6, EntityMutationStatus.CREATED, this.toRawEntity((IDPUGI)var2), var11);
                     return;
                  case 4:
                     if (this.isDeletable((IDPUG)var7)) {
                        IdpEntityDTO var8 = this.doDelete((IDP)var1, (IDPUGI)var2, (IDPUG)var7);
                        var5.flush();
                        var4.add(var6, EntityMutationStatus.DELETED, this.toRawEntity((IDPUGI)var2), var8);
                     } else {
                        var4.add(var6, EntityMutationStatus.NONE, f[4], this.toRawEntity((IDPUGI)var2), this.toEntityDTO((IDP)var1, (IDPUG)var7));
                     }

                     return;
                  default:
                     this.ignoreUnexpectedMappingInstruction(var3, var4, this.toRawEntity((IDPUGI)var2));
                     return;
               }
            }

            this.ignoreUnexpectedMappingInstruction(var3, var4, this.toRawEntity((IDPUGI)var2));
            return;
         }

         String[] var9 = f;
         var4.add(var6, EntityMutationStatus.NONE, var9[2], this.toRawEntity((IDPUGI)var2), null);
         return;
      }

      this.ignoreEntityActionIfRequired(var2);
      IdpEntityDTO var13 = this.doCreate((IDP)var1, (IDPUGI)var2);
      var5.flush();
      var4.add(var6, EntityMutationStatus.CREATED, this.toRawEntity((IDPUGI)var2), var13);
   }

   protected void transformNoDefEntityMappings(List<IDPUGI> var1, DataFetchingEnvironment var2) {
      this.getNoDefEntityMappings(var2, this.entityTypeInfo).forEach(var2x -> {
         IdpEntityInput var3 = this.toEntityInput(var2x);
         var3.setNodef(true);
         var1.add(var3);
      });
   }

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

   static {
      String[] var5 = new String[5];
      int var3 = 0;
      String var2 = "Ko\u001dn'0hIS\u0013u++\u007ft\u00168 ;y\u001b{\u001bv*tySxR}  dOdUkn=i^s\u0006q:--Ko\u001dn'0hI.\u007ft\u00168 ;y\u001b{\u001bv*tySxR}  dOd^8'3cTo\u001bv)tySxRu; lOt\u001dv";
      int var4 = "Ko\u001dn'0hIS\u0013u++\u007ft\u00168 ;y\u001b{\u001bv*tySxR}  dOdUkn=i^s\u0006q:--Ko\u001dn'0hI.\u007ft\u00168 ;y\u001b{\u001bv*tySxR}  dOd^8'3cTo\u001bv)tySxRu; lOt\u001dv"
         .length();
      char var1 = '\f';
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     f = var5;
                     b = f[3];
                     return;
                  }

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

                  var2 = "\u0011\u001axVNU\u0017u\u0015u\u0018D\u001a\u0017=\u0016<\u0013NN\n!\n;\u0005\u0000S\u00070\u001dh\u001fTCC%\u0001s\u0000I^\u0006'=\u0013\u001ci\u0018D\u001a\u0017=\u0016<\u0013NN\n!\n<\u0002H[\u0017u\u001aoVNU\u0017u\u0017y\u001aEN\u00027\u001fyZ\u0000S\u0004;\u001cn\u001fN]C!\u001byVMO\u00174\u0007u\u0019N";
                  var4 = "\u0011\u001axVNU\u0017u\u0015u\u0018D\u001a\u0017=\u0016<\u0013NN\n!\n;\u0005\u0000S\u00070\u001dh\u001fTCC%\u0001s\u0000I^\u0006'=\u0013\u001ci\u0018D\u001a\u0017=\u0016<\u0013NN\n!\n<\u0002H[\u0017u\u001aoVNU\u0017u\u0017y\u001aEN\u00027\u001fyZ\u0000S\u0004;\u001cn\u001fN]C!\u001byVMO\u00174\u0007u\u0019N"
                     .length();
                  var1 = '+';
                  var7 = -1;
            }

            var10000 = 18;
            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] ^ 113);
      }

      return var10000;
   }

   private static String b(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 -> 71;
            case 1 -> 97;
            case 2 -> 14;
            case 3 -> 100;
            case 4 -> 50;
            case 5 -> 40;
            default -> 113;
         });
      }

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