package com.l7tech.gateway.pm2.graphql.helper;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.l7tech.gateway.pm2.graphql.beans.PM2EntityPropertyInput;
import com.l7tech.gateway.pm2.graphql.beans.entity.AssertionExtensionMethodResult;
import com.l7tech.gateway.pm2.graphql.beans.entity.AssertionMethodsInput;
import com.l7tech.policy.AssertionRegistry;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.AssertionMetadata;
import com.l7tech.policy.assertion.ExtensionInterfaceBinding;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.Functions.Unary;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class AssertionExtensionHelper {
   private static final Logger a;
   private static final String b;
   private static final String c;
   private final AssertionRegistry d;
   private final ObjectMapper e;
   private static final String[] f;

   public AssertionExtensionHelper(AssertionRegistry var1) {
      this.d = var1;
      this.e = new ObjectMapper();
   }

   public AssertionExtensionMethodResult invoke(String var1, String var2, List<PM2EntityPropertyInput> var3) {
      AssertionExtensionMethodResult var4 = null;
      Assertion var5 = this.d.findByExternalName(var1);
      boolean var6 = false;
      if (var5 == null) {
         return new AssertionExtensionMethodResult(false, null, f[5]);
      }

      AssertionMethodsInput var7 = this.a(var5, var1, var3);

      for (Method var11 : var7.getMethods()) {
         if (var11.getName().equals(var2)) {
            try {
               var4 = new AssertionExtensionMethodResult(true, var11.invoke(var7.getImplementationObject(), this.a(var11, var3)), null);
            } catch (InvocationTargetException var15) {
               a.log(Level.WARNING, ExceptionUtils.getMessage(var15));
               String var18 = ExceptionUtils.getMessage(var15);
               String[] var17 = f;
               return new AssertionExtensionMethodResult(false, null, var17[3] + var18);
            } catch (Exception var16) {
               a.log(Level.WARNING, ExceptionUtils.getMessage(var16));
               String var10004 = ExceptionUtils.getMessage(var16);
               String[] var13 = f;
               return new AssertionExtensionMethodResult(false, null, var13[1] + var10004);
            }

            var6 = true;
            break;
         }
      }

      try {
         if (!var6) {
            a.log(Level.WARNING, var2 + f[7]);
            return new AssertionExtensionMethodResult(false, null, f[6]);
         } else {
            return var4;
         }
      } catch (InvocationTargetException var14) {
         throw var14;
      }
   }

   private AssertionMethodsInput a(Assertion var1, String var2, List<PM2EntityPropertyInput> var3) {
      AssertionMethodsInput var4 = new AssertionMethodsInput();
      String[] var8 = f;
      if (var2.equals(var8[4])) {
         try {
            Class var5 = Class.forName(var8[0], true, var1.getClass().getClassLoader());
            var4.setMethods(var5.getMethods());
            var4.setImplementationObject(null);
            PM2EntityPropertyInput var6 = new PM2EntityPropertyInput(var8[10], a);
            var3.addFirst(var6);
         } catch (ClassNotFoundException var9) {
            a.log(Level.WARNING, ExceptionUtils.getMessage(var9));
            throw new RuntimeException(ExceptionUtils.getMessage(var9));
         }
      } else {
         AssertionMetadata var10000 = var1.meta();
         var8 = f;
         Unary var11 = (Unary)var10000.get(var8[9]);
         if (var11 != null) {
            Collection var12 = (Collection)var11.call(this.d.getApplicationContext());
            if (var12 != null) {
               ExtensionInterfaceBinding var7 = (ExtensionInterfaceBinding)var12.iterator().next();

               try {
                  if (var7.getImplementationObject() == null) {
                     throw new RuntimeException(f[11] + var2);
                  }

                  var4.setMethods(var7.getImplementationObject().getClass().getMethods());
                  var4.setImplementationObject(var7.getImplementationObject());
               } catch (ClassNotFoundException var10) {
                  throw var10;
               }
            }
         }
      }

      return var4;
   }

   private Object[] a(Method param1, List<PM2EntityPropertyInput> param2) {
      // $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 2
      // 01: ifnull 11
      // 04: aload 2
      // 05: invokeinterface java/util/List.isEmpty ()Z 1
      // 0a: ifeq 17
      // 0d: goto 11
      // 10: athrow
      // 11: bipush 0
      // 12: anewarray 216
      // 15: areturn
      // 16: athrow
      // 17: aload 2
      // 18: invokeinterface java/util/List.size ()I 1
      // 1d: anewarray 216
      // 20: astore 3
      // 21: bipush 0
      // 22: istore 4
      // 24: iload 4
      // 26: aload 2
      // 27: invokeinterface java/util/List.size ()I 1
      // 2c: if_icmpge a8
      // 2f: aload 1
      // 30: invokevirtual java/lang/reflect/Method.getParameterTypes ()[Ljava/lang/Class;
      // 33: iload 4
      // 35: aaload
      // 36: astore 5
      // 38: aload 2
      // 39: iload 4
      // 3b: invokeinterface java/util/List.get (I)Ljava/lang/Object; 2
      // 40: checkcast com/l7tech/gateway/pm2/graphql/beans/PM2EntityPropertyInput
      // 43: invokevirtual com/l7tech/gateway/pm2/graphql/beans/PM2EntityPropertyInput.getValue ()Ljava/lang/Object;
      // 46: astore 6
      // 48: aload 5
      // 4a: ldc java/lang/String
      // 4c: invokevirtual java/lang/Object.equals (Ljava/lang/Object;)Z
      // 4f: ifeq 5c
      // 52: aload 3
      // 53: iload 4
      // 55: aload 6
      // 57: aastore
      // 58: goto a2
      // 5b: athrow
      // 5c: aload 5
      // 5e: invokevirtual java/lang/Class.isPrimitive ()Z
      // 61: ifeq 6e
      // 64: aload 3
      // 65: iload 4
      // 67: aload 6
      // 69: aastore
      // 6a: goto a2
      // 6d: athrow
      // 6e: aload 5
      // 70: invokevirtual java/lang/Class.isEnum ()Z
      // 73: ifeq 88
      // 76: aload 3
      // 77: iload 4
      // 79: aload 5
      // 7b: aload 6
      // 7d: invokevirtual java/lang/Object.toString ()Ljava/lang/String;
      // 80: invokestatic java/lang/Enum.valueOf (Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
      // 83: aastore
      // 84: goto a2
      // 87: athrow
      // 88: aload 3
      // 89: iload 4
      // 8b: aload 0
      // 8c: getfield com/l7tech/gateway/pm2/graphql/helper/AssertionExtensionHelper.e Lcom/fasterxml/jackson/databind/ObjectMapper;
      // 8f: aload 6
      // 91: aload 5
      // 93: invokevirtual com/fasterxml/jackson/databind/ObjectMapper.convertValue (Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
      // 96: aastore
      // 97: goto a2
      // 9a: astore 7
      // 9c: aload 3
      // 9d: iload 4
      // 9f: aload 6
      // a1: aastore
      // a2: iinc 4 1
      // a5: goto 24
      // a8: aload 3
      // a9: areturn
      // try (51 -> 62): 62 java/lang/Exception
      // try (42 -> 50): 50 java/lang/Exception
      // try (32 -> 41): 41 java/lang/Exception
      // try (2 -> 10): 10 java/lang/Exception
      // try (0 -> 5): 6 java/lang/Exception
      // try (63 -> 71): 72 java/lang/Exception
   }

   static {
      String[] var5 = new String[12];
      int var3 = 0;
      String var2 = "\u000b/&\u0004]8r\r##\u0004Twr\r2%K]!g\u001b3.XEfi\u00063eMCnv\u00001'OI{t\t#?\\Pcs\rn\fXP\u007fn9\f\nXVzk\r.?|Pcs\r\u00053^Cne\u001c/9\u0013=..RAje\u001c%/\nt}t\u00072k\u0010\u0011P\u000b/&\u0004]8r\r##\u0004Twr\r2%K]!g\u001b3.XEfi\u00063eMCnv\u00001'OI{t\t#?\\Pcs\rn\fXP\u007fn9\f\nXVzk\r.?|Pcs\r\u00053^Cne\u001c/9\u0012>!'CUnr\u0001/%\nt}t\u00072q\n\u0013/2*ZY^J-8?XPlr>!'_T7=..RAje\u001c%/\nt}t\u00072k\u0010\u0011Fh\u001e!'CU/G\u001b3.XEfi\u0006`(E_io\u000f59KEfi\u0006`%K\\j#=..RAje\u001c%/\nt}t\u00072k\u0010\u0011Bc\u001c($N\u0011ai\u001c`-EDab\u0011H\r.^Y`bH.$^\u0011ii\u001d./\u0013/2*ZY^J-8?XPlr>!'_T\u001a\r8?O_|o\u0007.\u0002DEjt\u000e!(OBIg\u000b4$XH";
      int var4 = "\u000b/&\u0004]8r\r##\u0004Twr\r2%K]!g\u001b3.XEfi\u00063eMCnv\u00001'OI{t\t#?\\Pcs\rn\fXP\u007fn9\f\nXVzk\r.?|Pcs\r\u00053^Cne\u001c/9\u0013=..RAje\u001c%/\nt}t\u00072k\u0010\u0011P\u000b/&\u0004]8r\r##\u0004Twr\r2%K]!g\u001b3.XEfi\u00063eMCnv\u00001'OI{t\t#?\\Pcs\rn\fXP\u007fn9\f\nXVzk\r.?|Pcs\r\u00053^Cne\u001c/9\u0012>!'CUnr\u0001/%\nt}t\u00072q\n\u0013/2*ZY^J-8?XPlr>!'_T7=..RAje\u001c%/\nt}t\u00072k\u0010\u0011Fh\u001e!'CU/G\u001b3.XEfi\u0006`(E_io\u000f59KEfi\u0006`%K\\j#=..RAje\u001c%/\nt}t\u00072k\u0010\u0011Bc\u001c($N\u0011ai\u001c`-EDab\u0011H\r.^Y`bH.$^\u0011ii\u001d./\u0013/2*ZY^J-8?XPlr>!'_T\u001a\r8?O_|o\u0007.\u0002DEjt\u000e!(OBIg\u000b4$XH"
         .length();
      char var1 = 'P';
      int var7 = -1;

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

         while (true) {
            String var13 = a(a(var10000));
            switch (var10001) {
               case 0:
                  var5[var3++] = var13;
                  if ((var7 += var1) >= var4) {
                     f = var5;
                     String[] var9 = f;
                     b = f[8];
                     c = var9[2];
                     a = Logger.getLogger(AssertionExtensionHelper.class.getName());
                     return;
                  }

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

                  var2 = "\u0004/,MT}\u001c&/kC\\\u007fj\r-.DEnr\u0001/%\nW`s\u0006$kL^}&";
                  var4 = "\u0004/,MT}\u001c&/kC\\\u007fj\r-.DEnr\u0001/%\nW`s\u0006$kL^}&".length();
                  var1 = 6;
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String a(char[] var0) {
      int var10002 = var0.length;
      char[] var10001 = var0;
      int var10000 = var10002;

      for (int var1 = 0; var10000 > var1; var1++) {
         var10001[var1] = (char)(var10001[var1] ^ switch (var1 % 7) {
            case 0 -> 104;
            case 1 -> 64;
            case 2 -> 75;
            case 3 -> 42;
            case 4 -> 49;
            case 5 -> 15;
            default -> 6;
         });
      }

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