package com.l7tech.server.audit;

import com.l7tech.gateway.common.audit.AuditRecord;
import com.l7tech.gateway.common.audit.AuditRecordHeader;
import com.l7tech.gateway.common.audit.AuditSearchCriteria;
import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.EntityManager;
import com.l7tech.objectmodel.FindException;
import com.l7tech.util.Config;
import com.l7tech.util.Pair;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import java.util.Map;

public interface AuditRecordManager extends EntityManager<AuditRecord, AuditRecordHeader> {
   String PROP_NAME = "name";
   String PROP_MSG = "message";

   List<AuditRecordHeader> findHeaders(AuditSearchCriteria var1) throws FindException;

   Config getAuditValidatedConfig();

   Map<String, Pair<byte[], byte[]>> getDigestForAuditRecords(Collection<String> var1) throws FindException;

   void deleteOldAuditRecords(long var1) throws DeleteException;

   int findCount(AuditSearchCriteria var1) throws FindException;

   Collection<AuditRecord> findPage(AuditRecordManager.SortProperty var1, boolean var2, int var3, int var4, AuditSearchCriteria var5) throws FindException;

   long getMinMills(long var1) throws SQLException;

   int deleteRangeByTime(long var1, long var3) throws SQLException;

   long getMaxTableSpace() throws FindException;

   long getCurrentUsage() throws FindException;

   void setDatabaseFull(boolean var1);

   enum SortProperty {
      TIME,
      MESSAGE,
      LEVEL;

      private final String name;

      SortProperty(String var3) {
         this.name = var3;
      }

      String getPropertyName() {
         return this.name;
      }

      // $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 = "Y!jz@x\u0007Y-ueHl{\u0005x\rPSe\u0004`\u0001KS";
         int var5 = "Y!jz@x\u0007Y-ueHl{\u0005x\rPSe\u0004`\u0001KS".length();
         char var2 = 6;
         int var7 = -1;

         label25:
         while (true) {
            byte var10000 = 81;
            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) {
                        TIME = new AuditRecordManager.SortProperty(var0[0]);
                        MESSAGE = new AuditRecordManager.SortProperty(var0[1]);
                        LEVEL = new AuditRecordManager.SortProperty(var0[4]);
                        return;
                     }

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

                     var3 = ".U\u001d36\u000e\u0007\u0010d<,\u0001%2";
                     var5 = ".U\u001d36\u000e\u0007\u0010d<,\u0001%2".length();
                     var2 = 6;
                     var7 = -1;
               }

               var10000 = 56;
               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] ^ 79);
         }

         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 -> 101;
               case 1 -> 25;
               case 2 -> 87;
               case 3 -> 71;
               case 4 -> 120;
               case 5 -> 90;
               default -> 79;
            });
         }

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