package com.l7tech.server.bundling;

import com.l7tech.gateway.common.cluster.ClusterProperty;
import com.l7tech.gateway.common.security.rbac.Role;
import com.l7tech.gateway.common.service.PublishedService;
import com.l7tech.gateway.common.transport.InterfaceTag;
import com.l7tech.identity.Group;
import com.l7tech.identity.Identity;
import com.l7tech.identity.IdentityProvider;
import com.l7tech.identity.User;
import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.ObjectModelException;
import com.l7tech.objectmodel.folder.Folder;
import com.l7tech.policy.Policy;
import com.l7tech.server.EntityHeaderUtils;
import com.l7tech.server.bundling.exceptions.IncorrectMappingInstructionsException;
import com.l7tech.util.Either;
import com.l7tech.util.Functions;
import java.text.ParseException;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;

class n implements TransactionCallback<Either<Either<DeleteException, IncorrectMappingInstructionsException>, EntityHeader>> {
   final Entity val$entity;
   final Map val$cachedPrivateKeyOperations;
   final EntityMappingInstructions val$mapping;
   final Set val$deletedPolicyIds;
   final EntityBundleImporterImpl this$0;
   private static final String[] a;

   n(EntityBundleImporterImpl var1, Entity var2, Map var3, EntityMappingInstructions var4, Set var5) {
      this.this$0 = var1;
      this.val$entity = var2;
      this.val$cachedPrivateKeyOperations = var3;
      this.val$mapping = var4;
      this.val$deletedPolicyIds = var5;
   }

   public Either<Either<DeleteException, IncorrectMappingInstructionsException>, EntityHeader> doInTransaction(TransactionStatus var1) {
      try {
         try {
            if (EntityType.SSG_KEY_ENTRY == EntityType.findTypeByEntity(this.val$entity.getClass())) {
               int var37 = this.val$entity.getId().indexOf(":");
               if (var37 < 0) {
                  String var53 = this.val$entity.getId();
                  String[] var49 = a;
                  return Either.left(Either.left(new DeleteException(var49[2] + var53 + var49[4])));
               }

               String var40 = this.val$entity.getId().substring(0, var37);
               String var41 = this.val$entity.getId().substring(var37 + 1);
               this.val$cachedPrivateKeyOperations.put(this.val$mapping.getSourceEntityHeader(), new o(this, var40, var41));
            } else if (this.val$entity instanceof Identity) {
               Goid var36 = ((Identity)this.val$entity).getProviderId();

               IdentityProvider var39;
               try {
                  var39 = this.this$0.identityProviderFactory.getProvider(var36);
               } catch (FindException var25) {
                  String var52 = String.valueOf(var36);
                  String[] var48 = a;
                  return Either.left(Either.left(new DeleteException(var48[6] + var52, var25)));
               }

               try {
                  try {
                     if (this.val$entity instanceof Group) {
                        var39.getGroupManager().delete((Group)this.val$entity);
                        return Either.right(EntityHeaderUtils.fromEntity(this.val$entity));
                     }
                  } catch (FindException var26) {
                     throw a(var26);
                  }

                  try {
                     if (this.val$entity instanceof User) {
                        var39.getUserManager().delete((User)this.val$entity);
                     }
                  } catch (FindException var24) {
                     throw a(var24);
                  }
               } catch (DeleteException var27) {
                  return Either.left(Either.left(var27));
               }
            } else if (this.val$entity instanceof InterfaceTag) {
               try {
                  ClusterProperty var35 = (ClusterProperty)this.this$0.clusterPropertyManager.findByUniqueName(InterfaceTag.PROPERTY_NAME);
                  HashSet var38 = new HashSet();
                  if (var35 != null) {
                     var38.addAll(InterfaceTag.parseMultiple(var35.getValue()));
                     HashSet var4 = new HashSet(Functions.grep(var38, new p(this)));
                     this.this$0.clusterPropertyManager.putProperty(InterfaceTag.PROPERTY_NAME, InterfaceTag.toString(var4));
                  }
               } catch (ObjectModelException | ParseException var23) {
                  String var51 = ((InterfaceTag)this.val$entity).getName();
                  String[] var47 = a;
                  return Either.left(Either.left(new DeleteException(var47[9] + var51, var23)));
               }
            } else {
               label263: {
                  try {
                     if (this.val$entity instanceof Role && !((Role)this.val$entity).isUserCreated()) {
                        break label263;
                     }
                  } catch (FindException var31) {
                     throw a(var31);
                  }

                  label264: {
                     try {
                        if (this.val$entity instanceof Folder && Goid.equals(Folder.ROOT_FOLDER_ID, ((Folder)this.val$entity).getGoid())) {
                           break label264;
                        }
                     } catch (FindException var30) {
                        throw a(var30);
                     }

                     if (this.val$entity instanceof Policy) {
                        Set var34 = this.this$0.policyCache.findUsages(((Policy)this.val$entity).getGoid());
                        Policy var3 = (Policy)Functions.grepFirst(var34, new q(this));
                        if (var3 != null) {
                           EntityMappingInstructions var10002 = this.val$mapping;
                           String var10003 = EntityHeaderUtils.fromEntity(var3).toStringVerbose();
                           String[] var44 = a;
                           return Either.left(Either.right(new IncorrectMappingInstructionsException(var10002, var44[11] + var10003)));
                        }

                        try {
                           this.this$0.policyManager.deleteWithoutValidation((Policy)this.val$entity);
                           this.val$deletedPolicyIds.add(((Policy)this.val$entity).getGoid());
                           return Either.right(EntityHeaderUtils.fromEntity(this.val$entity));
                        } catch (DeleteException var22) {
                           String[] var43 = a;
                           return Either.left(Either.right(new IncorrectMappingInstructionsException(this.val$mapping, var43[5], var22)));
                        }
                     }

                     DeleteException var2;
                     label233: {
                        try {
                           if (this.val$entity instanceof PublishedService) {
                              try {
                                 this.this$0.serviceManager.delete((PublishedService)this.val$entity);
                                 this.val$deletedPolicyIds.add(((PublishedService)this.val$entity).getPolicy().getGoid());
                                 return Either.right(EntityHeaderUtils.fromEntity(this.val$entity));
                              } catch (DeleteException var28) {
                                 var2 = var28;
                                 break label233;
                              }
                           }
                        } catch (FindException var29) {
                           throw a(var29);
                        }

                        try {
                           this.this$0.entityCrud.delete(this.val$entity);
                           return Either.right(EntityHeaderUtils.fromEntity(this.val$entity));
                        } catch (DeleteException var21) {
                           String[] var7 = a;
                           return Either.left(Either.right(new IncorrectMappingInstructionsException(this.val$mapping, var7[3], var21)));
                        }
                     }

                     String[] var42 = a;
                     return Either.left(Either.right(new IncorrectMappingInstructionsException(this.val$mapping, var42[0], var2)));
                  }

                  String[] var45 = a;
                  return Either.left(Either.right(new IncorrectMappingInstructionsException(this.val$mapping, var45[7])));
               }

               EntityMappingInstructions var50 = this.val$mapping;
               String var54 = ((Role)this.val$entity).getName();
               String var10004 = this.val$entity.getId();
               String[] var46 = a;
               return Either.left(Either.right(new IncorrectMappingInstructionsException(var50, var46[10] + var54 + var46[8] + var10004)));
            }
         } finally {
            var1.flush();
         }
      } catch (DataIntegrityViolationException var33) {
         return Either.left(Either.right(new IncorrectMappingInstructionsException(this.val$mapping, a[1], var33)));
      }

      return Either.right(EntityHeaderUtils.fromEntity(this.val$entity));
   }

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

   static {
      String[] var5 = new String[12];
      int var3 = 0;
      String var2 = "v\nFq\u0014s.Z\u0011\u0013y\u0015?%A\u0000\u0013n\u0015!6\\\u0006V9v\nFq\u0014s.Z\u0011\u0013y\u0015?%A\u0000\u0013x\u001e')A\u001c\u001d==20E\f]z\u0003s!G\u0000\u0013q\u00198%Y\u001c\u0013r\u0005'`Z\u0003\u0013r\u00027%G+v\u0004]s\u001f'`Q\u0000_x\u00046`E\u0017Zk\u0011'%\u0015\u000eVd^s\t[\u0013Rq\u00197`^\u0000J=\u00197z\u0015\u0017v\nFq\u0014s.Z\u0011\u0013y\u0015?%A\u0000\u0013x\u001e')A\u001c/\u001bEve\u00006#A\u0000W=\u00197`B\fGuP5/G\bRiJs|^\u0000Jn\u0004<2P,W#Jo!Y\fRnN\u0017v\nFq\u0014s.Z\u0011\u0013y\u0015?%A\u0000\u0013m\u001f?)V\u001c'v\u0004]s\u001f'`S\f]yP:$P\u000bGt\u0004*`E\u0017\\k\u00197%GEDt\u0004;`\\\u0001\t=\u001dv\u0004]s\u001f'`Q\u0000_x\u00046`A\rV=\u0002</AEUr\u001c7%G\n\u0012EDt\u0004;`|\u0001\u0013\u001bv\u0004]s\u001f'`S\f]yP:.A\u0000A{\u00110%\u0015\u0011RzJs";
      int var4 = "v\nFq\u0014s.Z\u0011\u0013y\u0015?%A\u0000\u0013n\u0015!6\\\u0006V9v\nFq\u0014s.Z\u0011\u0013y\u0015?%A\u0000\u0013x\u001e')A\u001c\u001d==20E\f]z\u0003s!G\u0000\u0013q\u00198%Y\u001c\u0013r\u0005'`Z\u0003\u0013r\u00027%G+v\u0004]s\u001f'`Q\u0000_x\u00046`E\u0017Zk\u0011'%\u0015\u000eVd^s\t[\u0013Rq\u00197`^\u0000J=\u00197z\u0015\u0017v\nFq\u0014s.Z\u0011\u0013y\u0015?%A\u0000\u0013x\u001e')A\u001c/\u001bEve\u00006#A\u0000W=\u00197`B\fGuP5/G\bRiJs|^\u0000Jn\u0004<2P,W#Jo!Y\fRnN\u0017v\nFq\u0014s.Z\u0011\u0013y\u0015?%A\u0000\u0013m\u001f?)V\u001c'v\u0004]s\u001f'`S\f]yP:$P\u000bGt\u0004*`E\u0017\\k\u00197%GEDt\u0004;`\\\u0001\t=\u001dv\u0004]s\u001f'`Q\u0000_x\u00046`A\rV=\u0002</AEUr\u001c7%G\n\u0012EDt\u0004;`|\u0001\u0013\u001bv\u0004]s\u001f'`S\f]yP:.A\u0000A{\u00110%\u0015\u0011RzJs"
         .length();
      char var1 = 24;
      int var7 = -1;

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

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

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

                  var2 = "\u0002p)\u0007kS\u0014%t+\fpB\u00142h4\u001daJ\u00143~+\f$\u0000.\u0002~2\u0005`\u0007Z.eg\raKQ5tg\u0019kK]\"hkImS\u0014(bg\u000baNZ&12\u001aaC\u0014#h}I";
                  var4 = "\u0002p)\u0007kS\u0014%t+\fpB\u00142h4\u001daJ\u00143~+\f$\u0000.\u0002~2\u0005`\u0007Z.eg\raKQ5tg\u0019kK]\"hkImS\u0014(bg\u000baNZ&12\u001aaC\u0014#h}I"
                     .length();
                  var1 = 27;
                  var7 = -1;
            }

            var10000 = 9;
            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] ^ 61);
      }

      return var10000;
   }

   private static String a(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 -> 72;
            case 1 -> 24;
            case 2 -> 78;
            case 3 -> 96;
            case 4 -> 13;
            case 5 -> 46;
            default -> 61;
         });
      }

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