package com.l7tech.server.audit;

import com.l7tech.gateway.common.audit.AuditDetail;
import com.l7tech.gateway.common.audit.AuditRecord;
import com.l7tech.server.DefaultKey;
import com.l7tech.util.Config;
import com.l7tech.util.Option;
import com.l7tech.util.RunnableCallable;
import com.l7tech.util.Functions.Nullary;
import java.util.Collection;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicReference;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class AuditContextFactory {
   protected static final ThreadLocal<AuditContext> currentAuditContext;
   private static final AtomicReference<AuditLogListener> a;
   private final AuditLogListener b;
   private Config c;
   private AuditRecordManager d;
   private String e;
   private AuditPolicyEvaluator f;
   private AuditFilterPolicyManager g;
   private DefaultKey h;
   private boolean i = false;
   private static final String[] j;

   public AuditContextFactory(AuditLogListener var1) {
      this.b = var1;
      if (var1 != null) {
         try {
            if (!a.compareAndSet(null, var1)) {
               throw new IllegalStateException(j[7]);
            }
         } catch (IllegalStateException var2) {
            throw a(var2);
         }
      }
   }

   void a(Config var1, AuditRecordManager var2, String var3, AuditPolicyEvaluator var4, AuditFilterPolicyManager var5, DefaultKey var6) {
      this.c = var1;
      this.d = var2;
      this.e = var3;
      this.f = var4;
      this.g = var5;
      this.h = var6;
      this.i = true;
   }

   @NotNull
   public static AuditContext getCurrent() {
      AuditContext var0 = currentAuditContext.get();
      if (var0 == null) {
         var0 = createLogOnlyAuditContext();
      }

      try {
         if (var0 == null) {
            a(0);
         }

         return var0;
      } catch (IllegalStateException var1) {
         throw a(var1);
      }
   }

   public static LogOnlyAuditContext createLogOnlyAuditContext() {
      return new LogOnlyAuditContext(a.get());
   }

   public static <T> T doWithCustomAuditContext(@NotNull AuditContext var0, @NotNull Callable<T> var1) throws Exception {
      try {
         if (var0 == null) {
            a(1);
         }
      } catch (Exception var9) {
         throw a(var9);
      }

      try {
         if (var1 == null) {
            a(2);
         }
      } catch (Exception var10) {
         throw a(var10);
      }

      AuditContext var2 = currentAuditContext.get();
      currentAuditContext.set(var0);

      try {
         return (T)var1.call();
      } finally {
         currentAuditContext.set(var2);
      }
   }

   public void emitAuditRecord(AuditRecord var1) {
      this.emitAuditRecord(var1, false);
   }

   public void emitAuditRecord(AuditRecord var1, boolean var2) {
      this.emitAuditRecordWithDetails(var1, var2, null, null);
   }

   public void emitAuditRecordWithDetails(AuditRecord param1, boolean param2, @Nullable Object param3, @Nullable Collection<AuditDetail> param4) {
      // $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: invokevirtual com/l7tech/server/audit/AuditContextFactory.newContext ()Lcom/l7tech/server/audit/AuditContext;
      // 04: astore 5
      // 06: aload 5
      // 08: instanceof com/l7tech/server/audit/AuditContextImpl
      // 0b: ifeq 1a
      // 0e: aload 5
      // 10: checkcast com/l7tech/server/audit/AuditContextImpl
      // 13: goto 1b
      // 16: invokestatic com/l7tech/server/audit/AuditContextFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 19: athrow
      // 1a: aconst_null
      // 1b: invokestatic com/l7tech/util/Option.optional (Ljava/lang/Object;)Lcom/l7tech/util/Option;
      // 1e: astore 6
      // 20: aload 6
      // 22: invokevirtual com/l7tech/util/Option.isSome ()Z
      // 25: ifeq 52
      // 28: aload 6
      // 2a: invokevirtual com/l7tech/util/Option.some ()Ljava/lang/Object;
      // 2d: checkcast com/l7tech/server/audit/AuditContextImpl
      // 30: aload 1
      // 31: invokevirtual com/l7tech/server/audit/AuditContextImpl.a (Lcom/l7tech/gateway/common/audit/AuditRecord;)V
      // 34: iload 2
      // 35: ifeq 52
      // 38: goto 3f
      // 3b: invokestatic com/l7tech/server/audit/AuditContextFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3e: athrow
      // 3f: aload 6
      // 41: invokevirtual com/l7tech/util/Option.some ()Ljava/lang/Object;
      // 44: checkcast com/l7tech/server/audit/AuditContextImpl
      // 47: bipush 1
      // 48: invokevirtual com/l7tech/server/audit/AuditContextImpl.setUpdate (Z)V
      // 4b: goto 52
      // 4e: invokestatic com/l7tech/server/audit/AuditContextFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 51: athrow
      // 52: aload 4
      // 54: ifnull a1
      // 57: aload 4
      // 59: invokeinterface java/util/Collection.isEmpty ()Z 1
      // 5e: ifne a1
      // 61: goto 68
      // 64: invokestatic com/l7tech/server/audit/AuditContextFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 67: athrow
      // 68: aload 3
      // 69: ifnonnull 75
      // 6c: goto 73
      // 6f: invokestatic com/l7tech/server/audit/AuditContextFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 72: athrow
      // 73: aload 0
      // 74: astore 3
      // 75: aload 4
      // 77: invokeinterface java/util/Collection.iterator ()Ljava/util/Iterator; 1
      // 7c: astore 7
      // 7e: aload 7
      // 80: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 85: ifeq a1
      // 88: aload 7
      // 8a: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 8f: checkcast com/l7tech/gateway/common/audit/AuditDetail
      // 92: astore 8
      // 94: aload 5
      // 96: aload 8
      // 98: aload 3
      // 99: invokeinterface com/l7tech/server/audit/AuditContext.addDetail (Lcom/l7tech/gateway/common/audit/AuditDetail;Ljava/lang/Object;)V 3
      // 9e: goto 7e
      // a1: aload 6
      // a3: invokevirtual com/l7tech/util/Option.isSome ()Z
      // a6: ifeq bb
      // a9: aload 6
      // ab: invokevirtual com/l7tech/util/Option.some ()Ljava/lang/Object;
      // ae: checkcast com/l7tech/server/audit/AuditContextImpl
      // b1: invokevirtual com/l7tech/server/audit/AuditContextImpl.a ()V
      // b4: goto bb
      // b7: invokestatic com/l7tech/server/audit/AuditContextFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // ba: athrow
      // bb: return
      // try (3 -> 9): 9 java/lang/IllegalStateException
      // try (14 -> 24): 25 java/lang/IllegalStateException
      // try (17 -> 32): 33 java/lang/IllegalStateException
      // try (35 -> 40): 41 java/lang/IllegalStateException
      // try (37 -> 45): 46 java/lang/IllegalStateException
      // try (65 -> 72): 73 java/lang/IllegalStateException
   }

   public void doWithNewAuditContext(@NotNull AuditRecord var1, @NotNull Runnable var2) {
      try {
         if (var1 == null) {
            a(3);
         }
      } catch (Exception var5) {
         throw a(var5);
      }

      try {
         if (var2 == null) {
            a(4);
         }
      } catch (Exception var6) {
         throw a(var6);
      }

      try {
         this.doWithNewAuditContext(var1, new RunnableCallable(var2));
      } catch (Exception var4) {
         throw new RuntimeException(var4);
      }
   }

   public <T> T doWithNewAuditContext(@NotNull AuditRecord var1, @NotNull Callable<T> var2) throws Exception {
      try {
         if (var1 == null) {
            a(5);
         }
      } catch (Exception var3) {
         throw a(var3);
      }

      try {
         if (var2 == null) {
            a(6);
         }
      } catch (Exception var4) {
         throw a(var4);
      }

      return this.doWithNewAuditContext(var2, new m(this, var1));
   }

   public <T> T doWithNewAuditContext(@NotNull Callable<T> var1, @NotNull Nullary<AuditRecord> var2) throws Exception {
      try {
         if (var1 == null) {
            a(7);
         }
      } catch (Exception var28) {
         throw a(var28);
      }

      try {
         if (var2 == null) {
            a(8);
         }
      } catch (Exception var32) {
         throw a(var32);
      }

      AuditContext var3 = currentAuditContext.get();
      AuditContext var4 = this.newContext();

      label159: {
         try {
            if (var4 instanceof AuditContextImpl var10000) {
               break label159;
            }
         } catch (Exception var31) {
            throw a(var31);
         }

         var10000 = null;
      }

      Option var5 = Option.optional(var10000);
      currentAuditContext.set(var4);

      try {
         return (T)var1.call();
      } finally {
         try {
            if (var5.isSome()) {
               ((AuditContextImpl)var5.some()).a((AuditRecord)var2.call());
               ((AuditContextImpl)var5.some()).a();
            }
         } finally {
            currentAuditContext.set(var3);
         }
      }
   }

   protected AuditContext newContext() {
      try {
         if (!this.i) {
            return createLogOnlyAuditContext();
         }
      } catch (IllegalStateException var1) {
         throw a(var1);
      }

      return new AuditContextImpl(this.c, this.d, this.f, this.g, this.e, this.h, this.b);
   }

   static {
      String[] var5 = new String[13];
      int var3 = 0;
      String var2 = "7\u001eh\u0013 Ix\u0002Li\t?\fV8\u0003{(8@zV\u001cn\u0014,As\u0002\t}Fj\teQL`\u0000m\teXI|F Ye\u0002La\t9\ft\u0013La\u0013!@\b\u0004\u0019a\b,Nz\u0013\u000b\u0017\u0019k\u000f9~s\u0015\u0003}\u0002\u0007\u0015\u0003a\u0012(Tb\r\u0004\tl\t?HP\u0017\u000f{\t?U\b\u0015\rc\n,Nz\u0013\u0018\u0012\u0003X\u000f9DU\u0003\u001f{\t mc\u0012\u0005{%\"Bb\u0013\u0014{N7\u0018/\n(Me\u0002L`\b(\fW\u0003\bf\u0012\u000eCx\u0002\tw\u0012\u000bMu\u0002\u0003}\u001fmDw\u0005Ln\n?Iw\u0012\u0015/\u000e,H6\u0017Lh\n\"Nw\u001aLN\u0013)Eb:\u0003h*$_b\u0013\u0002j\u0014m_s\u0002*6\"`\u0012\u0003Yz\u001aLb\u00039Dy\u0012L*\u0015c\teV\u0001z\u00159\fx\u0019\u0018/\u0014(Xc\u0004\u0002/\b8@z\n\u0011\t{%8^d\u0013\u0002{+\u0015\u0003bI!\u001bb\u0013\u000fgI>Id\u0000\t}I,Yr\u001f\u0018 '8H\u007f\u0002/`\b9In\u0002*n\u00059Cd\u000f";
      int var4 = "7\u001eh\u0013 Ix\u0002Li\t?\fV8\u0003{(8@zV\u001cn\u0014,As\u0002\t}Fj\teQL`\u0000m\teXI|F Ye\u0002La\t9\ft\u0013La\u0013!@\b\u0004\u0019a\b,Nz\u0013\u000b\u0017\u0019k\u000f9~s\u0015\u0003}\u0002\u0007\u0015\u0003a\u0012(Tb\r\u0004\tl\t?HP\u0017\u000f{\t?U\b\u0015\rc\n,Nz\u0013\u0018\u0012\u0003X\u000f9DU\u0003\u001f{\t mc\u0012\u0005{%\"Bb\u0013\u0014{N7\u0018/\n(Me\u0002L`\b(\fW\u0003\bf\u0012\u000eCx\u0002\tw\u0012\u000bMu\u0002\u0003}\u001fmDw\u0005Ln\n?Iw\u0012\u0015/\u000e,H6\u0017Lh\n\"Nw\u001aLN\u0013)Eb:\u0003h*$_b\u0013\u0002j\u0014m_s\u0002*6\"`\u0012\u0003Yz\u001aLb\u00039Dy\u0012L*\u0015c\teV\u0001z\u00159\fx\u0019\u0018/\u0014(Xc\u0004\u0002/\b8@z\n\u0011\t{%8^d\u0013\u0002{+\u0015\u0003bI!\u001bb\u0013\u000fgI>Id\u0000\t}I,Yr\u001f\u0018 '8H\u007f\u0002/`\b9In\u0002*n\u00059Cd\u000f"
         .length();
      char var1 = '>';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 5;
         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) {
                     j = var5;
                     currentAuditContext = new ThreadLocal<>();
                     a = new AtomicReference<>();
                     return;
                  }

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

                  var2 = "3\"y.\u0018ey2:o2\bdC\u0014\"@3\tuC+4\"Ch\u0000:C2.Fh\u001fhE!(\\h\rxS>9\u0001\u0006\u0019i^#\u000eA)\u0018hO#\u000bO$\u0018bE.";
                  var4 = "3\"y.\u0018ey2:o2\bdC\u0014\"@3\tuC+4\"Ch\u0000:C2.Fh\u001fhE!(\\h\rxS>9\u0001\u0006\u0019i^#\u000eA)\u0018hO#\u000bO$\u0018bE."
                     .length();
                  var1 = 21;
                  var7 = -1;
            }

            var10000 = 36;
            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] ^ 19);
      }

      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 -> 115;
            case 1 -> 105;
            case 2 -> 10;
            case 3 -> 99;
            case 4 -> 72;
            case 5 -> 41;
            default -> 19;
         });
      }

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