package com.l7tech.server.policy.variable;

import com.l7tech.gateway.common.audit.AuditDetail;
import com.l7tech.policy.variable.Syntax.SyntaxErrorHandler;
import com.l7tech.server.audit.AuditContext;
import com.l7tech.util.CollectionUtils;
import java.util.Arrays;
import java.util.Collection;
import java.util.logging.Logger;

public class AuditSelector implements ExpandVariables.Selector<AuditSelector.AuditHolder> {
   private static final Logger a;
   private static final String[] b;

   @Override
   public Class<AuditSelector.AuditHolder> getContextObjectClass() {
      return AuditSelector.AuditHolder.class;
   }

   public ExpandVariables.Selector.Selection select(String var1, AuditSelector.AuditHolder var2, String var3, SyntaxErrorHandler var4, boolean var5) {
      String var10000 = var3.toLowerCase();
      String[] var8 = b;
      if (var10000.startsWith(var8[1])) {
         AuditDetail[] var9 = var2.a();
         if (var9 != null && var9.length != 0) {
            String var7 = var3.substring(12);
            if (var7.startsWith(".")) {
               var7 = var7.substring(1);
            }

            return new ExpandVariables.Selector.Selection(var9[var9.length - 1], var7);
         } else {
            return new ExpandVariables.Selector.Selection(null);
         }
      } else {
         var10000 = var3.toLowerCase();
         var8 = b;
         if (var10000.startsWith(var8[0])) {
            if (var3.length() < var8[2].length() + 1) {
               return null;
            }

            AuditDetail[] var6 = var2.a();
            return var6 != null && var6.length != 0 ? AuditRecordSelector.a(var3, var6, a) : new ExpandVariables.Selector.Selection(null);
         } else {
            return var3.toLowerCase().equalsIgnoreCase(b[3]) ? new ExpandVariables.Selector.Selection(var2.a()) : null;
         }
      }
   }

   static {
      String[] var5 = new String[4];
      int var3 = 0;
      String var2 = "X`.37Zd\u0012\fX`.37Zd\u0012i;!*";
      int var4 = "X`.37Zd\u0012\fX`.37Zd\u0012i;!*".length();
      char var1 = '\b';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 1;
         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) {
                     b = var5;
                     a = Logger.getLogger(AuditSelector.class.getName());
                     return;
                  }

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

                  var2 = "\"\u001aTIM \u001eh\u0007\"\u001aTIM \u001e";
                  var4 = "\"\u001aTIM \u001eh\u0007\"\u001aTIM \u001e".length();
                  var1 = '\b';
                  var7 = -1;
            }

            var10000 = 123;
            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] ^ 22);
      }

      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 -> 61;
            case 1 -> 4;
            case 2 -> 91;
            case 3 -> 83;
            case 4 -> 95;
            case 5 -> 55;
            default -> 22;
         });
      }

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

   public static final class AuditHolder {
      private final AuditContext a;

      public AuditHolder(AuditContext var1) {
         this.a = var1;
      }

      private AuditDetail[] a() {
         Collection var1 = CollectionUtils.join(this.a.getDetails().values());
         AuditDetail[] var2 = var1.toArray(new AuditDetail[var1.size()]);
         Arrays.sort(var2);
         return var2;
      }
   }
}
