package com.l7tech.search;

import com.l7tech.objectmodel.EntityType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.jetbrains.annotations.NotNull;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Dependency {
   boolean isDependency() default true;

   Dependency.DependencyType type() default Dependency.DependencyType.ANY;

   Dependency.MethodReturnType methodReturnType() default Dependency.MethodReturnType.ENTITY;

   String key() default "";

   boolean searchObject() default false;

   enum DependencyType {
      GENERIC,
      ASSERTION,
      POLICY,
      FOLDER,
      JDBC_CONNECTION,
      SECURE_PASSWORD,
      SERVICE,
      TRUSTED_CERT,
      CLUSTER_PROPERTY,
      ID_PROVIDER_CONFIG,
      JMS_ENDPOINT,
      SSG_ACTIVE_CONNECTOR,
      SSG_PRIVATE_KEY,
      SSG_CONNECTOR,
      ANY,
      SECURITY_ZONE,
      ENCAPSULATED_ASSERTION,
      REVOCATION_CHECK_POLICY,
      POLICY_ALIAS,
      SERVICE_ALIAS,
      USER,
      GROUP,
      RESOURCE_ENTRY,
      SITEMINDER_CONFIGURATION,
      CUSTOM_KEY_VALUE_STORE,
      RBAC_ROLE,
      EMAIL_LISTENER,
      FIREWALL_RULE,
      SAMPLE_MESSAGE,
      CASSANDRA_CONNECTION,
      HTTP_CONFIGURATION,
      ASSERTION_ACCESS,
      SCHEDULED_TASK,
      INTERFACE_TAG,
      SERVER_MODULE_FILE,
      POLICY_BACKED_SERVICE,
      SOLUTION_KIT,
      LOG_SINK,
      AUDIT_CONFIG;

      private EntityType entityType;
      private static final String[] a;

      DependencyType(EntityType var3) {
         this.entityType = var3;
      }

      public EntityType getEntityType() {
         return this.entityType;
      }

      @NotNull
      public static Dependency.DependencyType fromEntityType(@NotNull EntityType param0) {
         // $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: ifnonnull 0f
         // 04: bipush 0
         // 05: invokestatic com/l7tech/search/Dependency$DependencyType.$$$reportNull$$$0 (I)V
         // 08: goto 0f
         // 0b: invokestatic com/l7tech/search/Dependency$DependencyType.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 0e: athrow
         // 0f: invokestatic com/l7tech/search/Dependency$DependencyType.values ()[Lcom/l7tech/search/Dependency$DependencyType;
         // 12: astore 1
         // 13: aload 1
         // 14: arraylength
         // 15: istore 2
         // 16: bipush 0
         // 17: istore 3
         // 18: iload 3
         // 19: iload 2
         // 1a: if_icmpge 4d
         // 1d: aload 1
         // 1e: iload 3
         // 1f: aaload
         // 20: astore 4
         // 22: aload 0
         // 23: aload 4
         // 25: invokevirtual com/l7tech/search/Dependency$DependencyType.getEntityType ()Lcom/l7tech/objectmodel/EntityType;
         // 28: invokevirtual com/l7tech/objectmodel/EntityType.equals (Ljava/lang/Object;)Z
         // 2b: ifeq 47
         // 2e: aload 4
         // 30: dup
         // 31: ifnonnull 46
         // 34: goto 3b
         // 37: invokestatic com/l7tech/search/Dependency$DependencyType.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 3a: athrow
         // 3b: bipush 1
         // 3c: invokestatic com/l7tech/search/Dependency$DependencyType.$$$reportNull$$$0 (I)V
         // 3f: goto 46
         // 42: invokestatic com/l7tech/search/Dependency$DependencyType.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 45: athrow
         // 46: areturn
         // 47: iinc 3 1
         // 4a: goto 18
         // 4d: new java/lang/IllegalArgumentException
         // 50: dup
         // 51: aload 0
         // 52: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
         // 55: getstatic com/l7tech/search/Dependency$DependencyType.a [Ljava/lang/String;
         // 58: bipush 41
         // 5a: aaload
         // 5b: swap
         // 5c: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
         // 61: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
         // 64: athrow
         // try (0 -> 4): 5 java/lang/IllegalArgumentException
         // try (21 -> 29): 30 java/lang/IllegalArgumentException
         // try (26 -> 34): 35 java/lang/IllegalArgumentException
      }

      public static boolean hasDependencyType(@NotNull EntityType var0) {
         try {
            if (var0 == null) {
               $$$reportNull$$$0(2);
            }
         } catch (IllegalArgumentException var6) {
            throw a(var6);
         }

         for (Dependency.DependencyType var4 : values()) {
            try {
               if (var0.equals(var4.getEntityType())) {
                  return true;
               }
            } catch (IllegalArgumentException var5) {
               throw a(var5);
            }
         }

         return false;
      }

      // $VF: Failed to inline enum fields
      // 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!)
      static {
         String[] var5 = new String[48];
         int var3 = 0;
         String var2 = "z\\7\u0006\n&y~V0\u0006\u0001,y~+Sw\u0018j9RBU{\u001dj&\u0000WB{\u001dj\u0011\u0000FUv\u0011 ;\u0006O\u0014\\\u001050\u000bRUv\u0016<\u0001\u001cFU\u000eVj\u001a(\u0010\u000bBYl\f\u0011,\u0015S\u0010qK&\u0000\u00071\u007f\u007fV*\u0004\u0016&scK\fcW9\u0010\u0001,y~G>\f\u0001\tbZ4\u0006\n7y|]\f`W9\f\u0016<iqT<\u0004\u0006\u0012xL!\u0015\n&y~^<\u0002\u00007wdQ:\u000b\u0016uV6\u0004\u00056c|Y!\u0000\u0011:wcK0\u0017\u0001,y~\u0007c]'\u0013\u001c&s\u0011Xy\u0006\u00010\u0015S^|\u0010+6\u001cbIh\u0010\u0006vW9\u0001\u00107\u0005wJ:\u0010\u0005\u0012c]'\u0013\u00107i}W1\u0010\u0019 ivQ9\u0000\u0014sY&\u0016\u0014+rbY*\u0006\u001a+xu[!\f\u001a++Sw\u0018j9RBU{\u001dj&\u0000WB{\u001dj\u0011\u0000FUv\u0011 ;\u0006O\u0014\\\u001050\u000bRUv\u0016<\u0001\u001cFU\u0015`W9\f\u0016<irY6\u000e\u0010!ic]'\u0013\u001c&s\rvQ'\u0000\u0002$z|G'\u0010\u0019 \fqM1\f\u0001:u\u007fV3\f\u0012\u0014cK2\u001a\u0014&byN0\u001a\u0016*x~]6\u0011\u001a7\u0018cQ!\u0000\u0018,xt]'\u001a\u0016*xvQ2\u0010\u0007$byW;\u000eb]&\n\u00007uuG0\u000b\u00017o\ryV!\u0000\u0007#ws]*\u0011\u0014\"\u0003qV,\u000euU4\f\u0019:zyK!\u0000\u001b d\u000fcK2\u001a\u00057\u007ffY!\u0000\n.si>qj\u001208\u0000XD8\u0013*'Ev~w\u0001\u000b \tZ\u0010h\u001474\bSD}\u0007er@E\u00178\u001a#u@E\u001e=\u0006e8\u0010ED8\u001b*!ETU8\u001b09\t\tqK&\u0000\u00071\u007f\u007fV\u000ec[=\u0000\u00110zu\\*\u0011\u00146}\b|W2\u001a\u0006,x{\u000eVj\u001a(\u0010\u000bBYl\f\u0011,\u0015S\nUv\u0001,!\u001cbIh\u0010\fdJ \u0016\u0001 ro[0\u0017\u0001\u0004eK0\u0017\u000ecY8\u0015\u0019 i}]&\u0016\u0014\"s\u000fc]6\u0010\u0007 i`Y&\u0016\u0002*dt\u0006`W9\f\u0016<\u0016sM&\u0011\u001a(i{],\u001a\u0003$ze]*\u0016\u0001*du\rc]'\u0013\u001c&soY9\f\u00146\fzU&\u001a\u0010+r`W<\u000b\u0001\u0010sT \u0016\u0001 doH'\n\u0005 ddA*~wU.;\nA^8\u0011 %\u0000XT}\u001b&,EBIh\u0010e3\nD\u0010}\u001b1<\u0011O\u0010l\f50_\u0016\rcK2\u001a\u0016*x~]6\u0011\u001a7\u0017b]#\n\u0016$byW;\u001a\u0016-ssS*\u0015\u001a)\u007fsA\u0007w];\u0000\u0007,u\rc]6\u0010\u0007,biG/\n\u001b ";
         int var4 = "z\\7\u0006\n&y~V0\u0006\u0001,y~+Sw\u0018j9RBU{\u001dj&\u0000WB{\u001dj\u0011\u0000FUv\u0011 ;\u0006O\u0014\\\u001050\u000bRUv\u0016<\u0001\u001cFU\u000eVj\u001a(\u0010\u000bBYl\f\u0011,\u0015S\u0010qK&\u0000\u00071\u007f\u007fV*\u0004\u0016&scK\fcW9\u0010\u0001,y~G>\f\u0001\tbZ4\u0006\n7y|]\f`W9\f\u0016<iqT<\u0004\u0006\u0012xL!\u0015\n&y~^<\u0002\u00007wdQ:\u000b\u0016uV6\u0004\u00056c|Y!\u0000\u0011:wcK0\u0017\u0001,y~\u0007c]'\u0013\u001c&s\u0011Xy\u0006\u00010\u0015S^|\u0010+6\u001cbIh\u0010\u0006vW9\u0001\u00107\u0005wJ:\u0010\u0005\u0012c]'\u0013\u00107i}W1\u0010\u0019 ivQ9\u0000\u0014sY&\u0016\u0014+rbY*\u0006\u001a+xu[!\f\u001a++Sw\u0018j9RBU{\u001dj&\u0000WB{\u001dj\u0011\u0000FUv\u0011 ;\u0006O\u0014\\\u001050\u000bRUv\u0016<\u0001\u001cFU\u0015`W9\f\u0016<irY6\u000e\u0010!ic]'\u0013\u001c&s\rvQ'\u0000\u0002$z|G'\u0010\u0019 \fqM1\f\u0001:u\u007fV3\f\u0012\u0014cK2\u001a\u0014&byN0\u001a\u0016*x~]6\u0011\u001a7\u0018cQ!\u0000\u0018,xt]'\u001a\u0016*xvQ2\u0010\u0007$byW;\u000eb]&\n\u00007uuG0\u000b\u00017o\ryV!\u0000\u0007#ws]*\u0011\u0014\"\u0003qV,\u000euU4\f\u0019:zyK!\u0000\u001b d\u000fcK2\u001a\u00057\u007ffY!\u0000\n.si>qj\u001208\u0000XD8\u0013*'Ev~w\u0001\u000b \tZ\u0010h\u001474\bSD}\u0007er@E\u00178\u001a#u@E\u001e=\u0006e8\u0010ED8\u001b*!ETU8\u001b09\t\tqK&\u0000\u00071\u007f\u007fV\u000ec[=\u0000\u00110zu\\*\u0011\u00146}\b|W2\u001a\u0006,x{\u000eVj\u001a(\u0010\u000bBYl\f\u0011,\u0015S\nUv\u0001,!\u001cbIh\u0010\fdJ \u0016\u0001 ro[0\u0017\u0001\u0004eK0\u0017\u000ecY8\u0015\u0019 i}]&\u0016\u0014\"s\u000fc]6\u0010\u0007 i`Y&\u0016\u0002*dt\u0006`W9\f\u0016<\u0016sM&\u0011\u001a(i{],\u001a\u0003$ze]*\u0016\u0001*du\rc]'\u0013\u001c&soY9\f\u00146\fzU&\u001a\u0010+r`W<\u000b\u0001\u0010sT \u0016\u0001 doH'\n\u0005 ddA*~wU.;\nA^8\u0011 %\u0000XT}\u001b&,EBIh\u0010e3\nD\u0010}\u001b1<\u0011O\u0010l\f50_\u0016\rcK2\u001a\u0016*x~]6\u0011\u001a7\u0017b]#\n\u0016$byW;\u001a\u0016-ssS*\u0015\u001a)\u007fsA\u0007w];\u0000\u0007,u\rc]6\u0010\u0007,biG/\n\u001b "
            .length();
         char var1 = 15;
         int var7 = -1;

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

            while (true) {
               String var9 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var5[var3++] = var9;
                     if ((var7 += var1) >= var4) {
                        a = var5;
                        String[] var8 = a;
                        GENERIC = new Dependency.DependencyType(EntityType.GENERIC);
                        ASSERTION = new Dependency.DependencyType(null);
                        POLICY = new Dependency.DependencyType(EntityType.POLICY);
                        FOLDER = new Dependency.DependencyType(EntityType.FOLDER);
                        JDBC_CONNECTION = new Dependency.DependencyType(EntityType.JDBC_CONNECTION);
                        SECURE_PASSWORD = new Dependency.DependencyType(EntityType.SECURE_PASSWORD);
                        SERVICE = new Dependency.DependencyType(EntityType.SERVICE);
                        TRUSTED_CERT = new Dependency.DependencyType(EntityType.TRUSTED_CERT);
                        CLUSTER_PROPERTY = new Dependency.DependencyType(EntityType.CLUSTER_PROPERTY);
                        ID_PROVIDER_CONFIG = new Dependency.DependencyType(EntityType.ID_PROVIDER_CONFIG);
                        JMS_ENDPOINT = new Dependency.DependencyType(EntityType.JMS_ENDPOINT);
                        SSG_ACTIVE_CONNECTOR = new Dependency.DependencyType(EntityType.SSG_ACTIVE_CONNECTOR);
                        SSG_PRIVATE_KEY = new Dependency.DependencyType(EntityType.SSG_KEY_ENTRY);
                        SSG_CONNECTOR = new Dependency.DependencyType(EntityType.SSG_CONNECTOR);
                        ANY = new Dependency.DependencyType(EntityType.ANY);
                        SECURITY_ZONE = new Dependency.DependencyType(EntityType.SECURITY_ZONE);
                        ENCAPSULATED_ASSERTION = new Dependency.DependencyType(EntityType.ENCAPSULATED_ASSERTION);
                        REVOCATION_CHECK_POLICY = new Dependency.DependencyType(EntityType.REVOCATION_CHECK_POLICY);
                        POLICY_ALIAS = new Dependency.DependencyType(EntityType.POLICY_ALIAS);
                        SERVICE_ALIAS = new Dependency.DependencyType(EntityType.SERVICE_ALIAS);
                        USER = new Dependency.DependencyType(EntityType.USER);
                        GROUP = new Dependency.DependencyType(EntityType.GROUP);
                        RESOURCE_ENTRY = new Dependency.DependencyType(EntityType.RESOURCE_ENTRY);
                        SITEMINDER_CONFIGURATION = new Dependency.DependencyType(EntityType.SITEMINDER_CONFIGURATION);
                        CUSTOM_KEY_VALUE_STORE = new Dependency.DependencyType(EntityType.CUSTOM_KEY_VALUE_STORE);
                        RBAC_ROLE = new Dependency.DependencyType(EntityType.RBAC_ROLE);
                        EMAIL_LISTENER = new Dependency.DependencyType(EntityType.EMAIL_LISTENER);
                        FIREWALL_RULE = new Dependency.DependencyType(EntityType.FIREWALL_RULE);
                        SAMPLE_MESSAGE = new Dependency.DependencyType(EntityType.SAMPLE_MESSAGE);
                        CASSANDRA_CONNECTION = new Dependency.DependencyType(EntityType.CASSANDRA_CONFIGURATION);
                        HTTP_CONFIGURATION = new Dependency.DependencyType(EntityType.HTTP_CONFIGURATION);
                        ASSERTION_ACCESS = new Dependency.DependencyType(EntityType.ASSERTION_ACCESS);
                        SCHEDULED_TASK = new Dependency.DependencyType(EntityType.SCHEDULED_TASK);
                        INTERFACE_TAG = new Dependency.DependencyType(EntityType.INTERFACE_TAG);
                        SERVER_MODULE_FILE = new Dependency.DependencyType(EntityType.SERVER_MODULE_FILE);
                        POLICY_BACKED_SERVICE = new Dependency.DependencyType(EntityType.POLICY_BACKED_SERVICE);
                        SOLUTION_KIT = new Dependency.DependencyType(EntityType.SOLUTION_KIT);
                        LOG_SINK = new Dependency.DependencyType(EntityType.LOG_SINK);
                        AUDIT_CONFIG = new Dependency.DependencyType(EntityType.AUDIT_CONFIG);
                        return;
                     }

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

                     var2 = "Z\u007f\t6$\tCZ\u007f\u00134)\u0005Z]}\u001f!*Su9\u001283y\u007f\u001b;\u0003\u0002.zw\u001bs\u0015Xcf3V#\u0015\u0002f{|Ov\u0014\u00132`aUv\b\u0003*y";
                     var4 = "Z\u007f\t6$\tCZ\u007f\u00134)\u0005Z]}\u001f!*Su9\u001283y\u007f\u001b;\u0003\u0002.zw\u001bs\u0015Xcf3V#\u0015\u0002f{|Ov\u0014\u00132`aUv\b\u0003*y"
                        .length();
                     var1 = 18;
                     var7 = -1;
               }

               var10000 = 109;
               var10001 = var2.substring(++var7, var7 + var1);
               var10002 = 0;
            }
         }
      }

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

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

         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 -> 126;
               case 1 -> 86;
               case 2 -> 59;
               case 3 -> 11;
               case 4 -> 27;
               case 5 -> 43;
               default -> 120;
            });
         }

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

   enum MethodReturnType {
      NAME,
      GUID,
      VARIABLE,
      ENTITY_HEADER,
      GOID,
      ENTITY;

      // $VF: Failed to inline enum fields
      // 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!)
      static {
         String[] var0 = new String[6];
         int var4 = 0;
         String var3 = "p1\u001a!\bh1\u0005-\bK\u0006{\u0006{>\u0003-\u001dP\u0004y%\u001e ";
         int var5 = "p1\u001a!\bh1\u0005-\bK\u0006{\u0006{>\u0003-\u001dP\u0004y%\u001e ".length();
         char var2 = 4;
         int var7 = -1;

         label25:
         while (true) {
            byte var10000 = 16;
            String var10001 = var3.substring(++var7, var7 + var2);
            byte var10002 = -1;

            while (true) {
               String var8 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var0[var4++] = var8;
                     if ((var7 += var2) >= var5) {
                        NAME = new Dependency.MethodReturnType();
                        GUID = new Dependency.MethodReturnType();
                        VARIABLE = new Dependency.MethodReturnType();
                        ENTITY_HEADER = new Dependency.MethodReturnType();
                        GOID = new Dependency.MethodReturnType();
                        ENTITY = new Dependency.MethodReturnType();
                        return;
                     }

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

                     var3 = "\u0005@}Sc.k\bKh^r%\u0004\u0007A`^";
                     var5 = "\u0005@}Sc.k\bKh^r%\u0004\u0007A`^".length();
                     var2 = '\r';
                     var7 = -1;
               }

               var10000 = 110;
               var10001 = var3.substring(++var7, var7 + var2);
               var10002 = 0;
            }
         }
      }

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

         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 -> 46;
               case 1 -> 96;
               case 2 -> 71;
               case 3 -> 116;
               case 4 -> 89;
               case 5 -> 25;
               default -> 90;
            });
         }

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