package com.l7tech.gateway.common.security.rbac;

import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.Goid;
import com.l7tech.security.rbac.RbacAttribute;
import com.l7tech.util.SyspropUtil;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class RbacAttributeCollector {
   static final String a;
   private static final Logger b;
   private static final ResourceBundle c;
   private static Collection<Class> d;
   private static final String e;
   private static final String[] f;

   @NotNull
   public static Map<String, String> collectAttributes(@NotNull EntityType var0) {
      try {
         if (var0 == null) {
            a(0);
         }
      } catch (IllegalArgumentException var6) {
         throw a(var6);
      }

      TreeMap var1 = new TreeMap();
      Class var2 = var0.getEntityClass();

      try {
         if (var2 != null) {
            var1.putAll(collectAttributes(var2));
         }
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }

      try {
         if (EntityType.ANY.equals(var0)) {
            var1.put(f[4], f[11]);
         }
      } catch (IllegalArgumentException var5) {
         throw a(var5);
      }

      try {
         if (var1 == null) {
            a(1);
         }

         return var1;
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }
   }

   protected static Map<String, String> collectAttributes(@NotNull Class var0) {
      try {
         if (var0 == null) {
            a(2);
         }
      } catch (IntrospectionException var16) {
         throw a(var16);
      }

      TreeMap var1 = new TreeMap();

      try {
         BeanInfo var2 = Introspector.getBeanInfo(var0);
         PropertyDescriptor[] var3 = var2.getPropertyDescriptors();

         for (PropertyDescriptor var7 : var3) {
            Method var8 = var7.getReadMethod();

            label77: {
               try {
                  if (var8 == null || !a(var8.getReturnType())) {
                     break label77;
                  }
               } catch (IntrospectionException var14) {
                  throw a(var14);
               }

               String var9 = var7.getName();

               try {
                  if (SyspropUtil.getBoolean(f[13], false)) {
                     var1.put(var9, a(var9, null));
                     continue;
                  }
               } catch (IntrospectionException var13) {
                  throw a(var13);
               }

               RbacAttribute var10 = var8.getAnnotation(RbacAttribute.class);
               if (var10 != null) {
                  String var11 = var10.displayNameIdentifier();
                  var1.put(var9, a(var9, var11));
               }
               continue;
            }

            Logger var10000 = b;
            Level var10001 = Level.FINEST;
            String var10002 = var7.getName();
            String[] var12 = f;
            var10000.log(var10001, var12[2] + var10002);
         }

         HashSet var17 = new HashSet();
         a(var0, var17);

         for (Class var19 : var17) {
            var1.putAll(collectAttributes(var19));
         }
      } catch (IntrospectionException var15) {
         b.log(Level.WARNING, f[8] + var0, var15);
      }

      return var1;
   }

   private static String a(@NotNull String var0, @Nullable String var1) {
      try {
         if (var0 == null) {
            a(3);
         }
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }

      String var2 = var0;

      try {
         if (StringUtils.isNotBlank(var1) && c.containsKey(var1)) {
            return c.getString(var1);
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      if (c.containsKey(var0)) {
         var2 = c.getString(var0);
      }

      return var2;
   }

   private static boolean a(Class var0) {
      for (Class var2 : d) {
         try {
            if (var2.isAssignableFrom(var0)) {
               return true;
            }
         } catch (IllegalArgumentException var3) {
            throw a(var3);
         }
      }

      return false;
   }

   private static void a(Class var0, Set<Class> var1) {
      Class[] var2 = var0.getInterfaces();

      for (Class var6 : var2) {
         var1.add(var6);
         a(var6, var1);
      }
   }

   static {
      String[] var5 = new String[17];
      int var3 = 0;
      String var2 = "U/\u0005*2\u0002WS#\u0000*9TWS7\t|qVL[-\u0007kqFFU5\u001al*L\fD\"\tfqgAW#)q*GJT5\u001c`\u001dZOZ%\u000bq1G>U/\u0005*2\u0002WS#\u0000*9TWS7\t|qVL[-\u0007kqFFU5\u001al*L\fD\"\tfqgAW#)q*GJT5\u001c`\u001dZOZ%\u000bq1G:x/Hb;AWS2Hj,\u0015JX6\ti7Q\u0003D%\u001cp,[\u0003B9\u0018`~SLD`\u0018w1EFD4\u0011%:PPU2\u0001u*ZQ\f`\u0005U,\t\u007f$\u0004X!\u0005`6U/\u0005+2\u0002WS#\u0000+9TWS7\t|pVL[-\u0007kpFFU5\u001al*L\rD\"\tfpgAW#)q*GJT5\u001c`->w2\u000fp3PMB`\u000ej,\u0015cx/\u001cK+YO\u00160\tw?XFB%\u001a%y\u0010P\u0011`\u0007c~\u0010P\u0018e\u001b%3@PB`\u0006j*\u0015AS`\u0006p2Y\u0011U/\u0004i;VWw4\u001cw7WVB%\u001b\u0015c.\tg2P\u0003B/Hl0AQY3\u0018`=A\u0003\bF2\u0007u\u0010TNS\u000eQ%\u001cA7FSZ!\u0011K?XF\u0004X!\u0005`GU/\u0005+2\u0002WS#\u0000+9TWS7\t|pVL[-\u0007kpFFU5\u001al*L\rD\"\tfpgAW#)q*GJT5\u001c`\u001dZOZ%\u000bq1G\rW,\u0004j)tOZGU/\u0005+2\u0002WS#\u0000+9TWS7\t|pVL[-\u0007kpFFU5\u001al*L\rD\"\tfpgAW#)q*GJT5\u001c`\u001dZOZ%\u000bq1G\rW,\u0004j)tOZ\u0011U/\u0004i;VWw4\u001cw7WVB%\u001b";
      int var4 = "U/\u0005*2\u0002WS#\u0000*9TWS7\t|qVL[-\u0007kqFFU5\u001al*L\fD\"\tfqgAW#)q*GJT5\u001c`\u001dZOZ%\u000bq1G>U/\u0005*2\u0002WS#\u0000*9TWS7\t|qVL[-\u0007kqFFU5\u001al*L\fD\"\tfqgAW#)q*GJT5\u001c`\u001dZOZ%\u000bq1G:x/Hb;AWS2Hj,\u0015JX6\ti7Q\u0003D%\u001cp,[\u0003B9\u0018`~SLD`\u0018w1EFD4\u0011%:PPU2\u0001u*ZQ\f`\u0005U,\t\u007f$\u0004X!\u0005`6U/\u0005+2\u0002WS#\u0000+9TWS7\t|pVL[-\u0007kpFFU5\u001al*L\rD\"\tfpgAW#)q*GJT5\u001c`->w2\u000fp3PMB`\u000ej,\u0015cx/\u001cK+YO\u00160\tw?XFB%\u001a%y\u0010P\u0011`\u0007c~\u0010P\u0018e\u001b%3@PB`\u0006j*\u0015AS`\u0006p2Y\u0011U/\u0004i;VWw4\u001cw7WVB%\u001b\u0015c.\tg2P\u0003B/Hl0AQY3\u0018`=A\u0003\bF2\u0007u\u0010TNS\u000eQ%\u001cA7FSZ!\u0011K?XF\u0004X!\u0005`GU/\u0005+2\u0002WS#\u0000+9TWS7\t|pVL[-\u0007kpFFU5\u001al*L\rD\"\tfpgAW#)q*GJT5\u001c`\u001dZOZ%\u000bq1G\rW,\u0004j)tOZGU/\u0005+2\u0002WS#\u0000+9TWS7\t|pVL[-\u0007kpFFU5\u001al*L\rD\"\tfpgAW#)q*GJT5\u001c`\u001dZOZ%\u000bq1G\rW,\u0004j)tOZ\u0011U/\u0004i;VWw4\u001cw7WVB%\u001b"
         .length();
      char var1 = '>';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 28;
         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) {
                     f = var5;
                     String[] var9 = f;
                     e = f[11];
                     a = var9[12];
                     b = Logger.getLogger(RbacAttributeCollector.class.getName());
                     c = ResourceBundle.getBundle(f[5]);
                     d = new HashSet<>();
                     d.add(Number.class);
                     d.add(long.class);
                     d.add(int.class);
                     d.add(byte.class);
                     d.add(short.class);
                     d.add(boolean.class);
                     d.add(char.class);
                     d.add(CharSequence.class);
                     d.add(Boolean.class);
                     d.add(Enum.class);
                     d.add(Goid.class);
                     return;
                  }

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

                  var2 = "\u001caS#e\u00038\u0000\u007fB*9AH>_\u000f\u0000\u0015/J/e\u0012\u0003\u001d/\u00029?_\u001fYbR9eZ\u0002\u0016{\u00078t\u000e\u0019\u000ba\u0007$d\u0016\u0000";
                  var4 = "\u001caS#e\u00038\u0000\u007fB*9AH>_\u000f\u0000\u0015/J/e\u0012\u0003\u001d/\u00029?_\u001fYbR9eZ\u0002\u0016{\u00078t\u000e\u0019\u000ba\u0007$d\u0016\u0000"
                     .length();
                  var1 = '\n';
                  var7 = -1;
            }

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

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

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

      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 -> 42;
            case 1 -> 92;
            case 2 -> 116;
            case 3 -> 25;
            case 4 -> 66;
            case 5 -> 41;
            default -> 63;
         });
      }

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