package com.l7tech.external.assertions.gatewaygraphql.server.util;

import com.l7tech.external.assertions.gatewaygraphql.server.error.GatewayEntityMutationException;
import com.l7tech.gateway.common.service.PublishedService;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.ObjectModelException;
import com.l7tech.objectmodel.SaveException;
import com.l7tech.objectmodel.folder.Folder;
import com.l7tech.policy.Policy;
import com.l7tech.server.folder.FolderManager;
import com.l7tech.server.folder.FolderManager.VisitFolderCallback;
import com.l7tech.server.policy.PolicyManager;
import com.l7tech.server.service.ServiceManager;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.PathUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import lombok.Generated;

public class FolderHelper {
   @Generated
   private static final Logger a;
   private final FolderManager b;
   private final PolicyManager c;
   private final ServiceManager d;
   private final Map<String, Folder> e;
   private static final String[] f;

   public FolderHelper(FolderManager var1, PolicyManager var2, ServiceManager var3) {
      this.b = var1;
      this.c = var2;
      this.d = var3;
      this.e = new HashMap<>();
   }

   public Folder getFolderSafely(String var1) {
      try {
         return this.b.findByPath(var1);
      } catch (FindException var3) {
         throw new GatewayEntityMutationException(EntityType.FOLDER, f[1] + ExceptionUtils.getMessageWithCause(var3), var3);
      }
   }

   public Folder getOrCreateFolderSafely(String var1) {
      try {
         return this.getOrCreateFolder(var1);
      } catch (FindException | SaveException var3) {
         throw new GatewayEntityMutationException(EntityType.FOLDER, f[0] + ExceptionUtils.getMessageWithCause(var3), var3);
      }
   }

   public Folder getOrCreateFolder(String var1) throws FindException, SaveException {
      Folder var2 = this.b.findByPath(var1);
      if (var2 == null) {
         var2 = this.e.get(var1);
         if (var2 == null) {
            var2 = this.a(var1);
         }
      }

      return var2;
   }

   private Folder a(String var1) throws FindException, SaveException {
      List var2 = PathUtils.getPaths(var1);
      String[] var3 = PathUtils.getPathElements(var1);
      Folder var4 = this.b.findRootFolder();
      Folder var5 = null;

      for (int var6 = 0; var6 < var2.size(); var6++) {
         Folder var7 = this.b.findByPath((String)var2.get(var6));
         if (var7 == null) {
            var7 = this.e.get(var2.get(var6));
         }

         if (var7 == null) {
            var5 = new Folder(var3[var6], var4);
            this.b.save(var5);
            this.e.put((String)var2.get(var6), var5);
            var4 = var5;
         } else {
            var4 = var7;
         }
      }

      try {
         if (var5 == null) {
            return var4;
         }
      } catch (FindException var8) {
         throw a(var8);
      }

      return var5;
   }

   public void visitFolderDFS(Folder var1, VisitFolderCallback var2) throws ObjectModelException {
      for (Folder var4 : this.b.findByFolder(var1.getGoid())) {
         this.visitFolderDFS(var4, var2);
      }

      for (PublishedService var8 : this.d.findByFolder(var1.getGoid())) {
         var2.apply(var8, this.d);
      }

      for (Policy var9 : this.c.findByFolder(var1.getGoid())) {
         try {
            if (var9.getType().isPolicyFragment()) {
               var2.apply(var9, this.c);
            }
         } catch (ObjectModelException var5) {
            throw a(var5);
         }
      }

      var2.apply(var1, this.b);
   }

   public boolean deleteFolderIfEmpty(Folder var1) throws ObjectModelException {
      try {
         if (this.a(var1)) {
            this.b.delete(var1);
            return true;
         } else {
            return false;
         }
      } catch (ObjectModelException var2) {
         throw a(var2);
      }
   }

   private boolean a(Folder param1) 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 1
      // 01: invokevirtual com/l7tech/objectmodel/folder/Folder.getGoid ()Lcom/l7tech/objectmodel/Goid;
      // 04: astore 2
      // 05: aload 0
      // 06: getfield com/l7tech/external/assertions/gatewaygraphql/server/util/FolderHelper.d Lcom/l7tech/server/service/ServiceManager;
      // 09: aload 2
      // 0a: invokeinterface com/l7tech/server/service/ServiceManager.findByFolder (Lcom/l7tech/objectmodel/Goid;)Ljava/util/Collection; 2
      // 0f: invokeinterface java/util/Collection.isEmpty ()Z 1
      // 14: ifeq 51
      // 17: aload 0
      // 18: getfield com/l7tech/external/assertions/gatewaygraphql/server/util/FolderHelper.c Lcom/l7tech/server/policy/PolicyManager;
      // 1b: aload 2
      // 1c: invokeinterface com/l7tech/server/policy/PolicyManager.findByFolder (Lcom/l7tech/objectmodel/Goid;)Ljava/util/Collection; 2
      // 21: invokeinterface java/util/Collection.isEmpty ()Z 1
      // 26: ifeq 51
      // 29: goto 30
      // 2c: invokestatic com/l7tech/external/assertions/gatewaygraphql/server/util/FolderHelper.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 2f: athrow
      // 30: aload 0
      // 31: getfield com/l7tech/external/assertions/gatewaygraphql/server/util/FolderHelper.b Lcom/l7tech/server/folder/FolderManager;
      // 34: aload 2
      // 35: invokeinterface com/l7tech/server/folder/FolderManager.findByFolder (Lcom/l7tech/objectmodel/Goid;)Ljava/util/Collection; 2
      // 3a: invokeinterface java/util/Collection.isEmpty ()Z 1
      // 3f: ifeq 51
      // 42: goto 49
      // 45: invokestatic com/l7tech/external/assertions/gatewaygraphql/server/util/FolderHelper.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 48: athrow
      // 49: bipush 1
      // 4a: goto 52
      // 4d: invokestatic com/l7tech/external/assertions/gatewaygraphql/server/util/FolderHelper.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 50: athrow
      // 51: bipush 0
      // 52: ireturn
      // try (3 -> 15): 16 com/l7tech/objectmodel/FindException
      // try (9 -> 24): 25 com/l7tech/objectmodel/FindException
      // try (18 -> 29): 29 com/l7tech/objectmodel/FindException
   }

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "i$O/\u00034JB5R5\u001f`J^3Y`\u0018z\u000f^3I2\u0018qYE8Z`\u0005|J\f0R,\u0015q]\f&\\4\u00194KI\"\\)\u001dg\u0015\f9i$O/\u00034JB5R5\u001f`J^3Y`\u0018z\u000f^3I2\u0018qYE8Z`\u0005|J\f0R,\u0015q]\f&\\4\u00194KI\"\\)\u001dg\u0015\f";
      int var4 = "i$O/\u00034JB5R5\u001f`J^3Y`\u0018z\u000f^3I2\u0018qYE8Z`\u0005|J\f0R,\u0015q]\f&\\4\u00194KI\"\\)\u001dg\u0015\f9i$O/\u00034JB5R5\u001f`J^3Y`\u0018z\u000f^3I2\u0018qYE8Z`\u0005|J\f0R,\u0015q]\f&\\4\u00194KI\"\\)\u001dg\u0015\f"
         .length();
      char var1 = '9';
      int var0 = -1;

      while (true) {
         String var10002 = a(60, b(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            f = var5;
            a = Logger.getLogger(FolderHelper.class.getName());
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

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

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

      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 -> 16;
            case 1 -> 106;
            case 2 -> 1;
            case 3 -> 124;
            case 4 -> 77;
            case 5 -> 40;
            default -> 19;
         });
      }

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