package com.l7tech.server.log;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.l7tech.common.log.HybridDiagnosticContext;
import com.l7tech.gateway.common.log.SinkConfiguration;
import com.l7tech.server.audit.AuditLogFormatter;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.MessageFormat;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.StreamHandler;

public class ConsoleMessageSink extends MessageSinkSupport {
   private final Handler e;
   private static final Function<String, String> f = new b();

   @Override
   public void close() {
   }

   @Override
   public List<Handler> getHandlers() {
      return Collections.singletonList(this.e);
   }

   ConsoleMessageSink(SinkConfiguration var1, Handler var2) {
      super(var1);
      this.e = var2;
   }

   @Override
   void processMessage(MessageCategory var1, LogRecord var2) {
      if (this.e != null) {
         this.e.publish(var2);
      }
   }

   static Handler b() {
      Handler var0 = null;
      Logger var1 = Logger.getLogger("");
      Handler[] var2 = var1.getHandlers();

      for (Handler var6 : var2) {
         if (var6 instanceof ConsoleMessageSink.L7ConsoleHandler) {
            var0 = var6;
            break;
         }
      }

      return var0;
   }

   public static class L7ConsoleHandler extends StreamHandler {
      private static final OutputStream a;
      private static final String[] b;

      public L7ConsoleHandler() {
         this.setOutputStream(a);
      }

      @Override
      public synchronized void publish(LogRecord var1) {
         if (AuditLogFormatter.isFormatJson()) {
            Gson var2 = new Gson();

            Map var3;
            try {
               var3 = (Map)var2.fromJson(var1.getMessage(), new a(this).getType());
            } catch (JsonSyntaxException var8) {
               var3 = new HashMap();

               try {
                  String[] var10 = b;
                  var3.put(var10[10], new MessageFormat(var1.getMessage()).format(var1.getParameters()));
               } catch (Exception var7) {
                  String[] var6 = b;
                  var3.put(var6[4], var1.getMessage());
               }
            }

            if (var3 == null) {
               var3 = new HashMap();
            }

            try {
               var3.computeIfAbsent(b[3], ConsoleMessageSink.f);
               var3.computeIfAbsent(b[11], ConsoleMessageSink.f);
               var3.computeIfAbsent(b[9], ConsoleMessageSink.f);
               var3.computeIfAbsent(b[6], ConsoleMessageSink.f);
               var3.computeIfAbsent(b[0], ConsoleMessageSink.f);
               if (HybridDiagnosticContext.getFirst(b[8]) != null) {
                  var3.computeIfAbsent(b[2], ConsoleMessageSink.f);
               }
            } catch (JsonSyntaxException var9) {
               throw a(var9);
            }

            String[] var11 = b;
            var3.computeIfAbsent(var11[1], ConsoleMessageSink.f);
            var3.computeIfAbsent(var11[5], ConsoleMessageSink.f);
            var3.computeIfAbsent(var11[7], ConsoleMessageSink.f);
            var1.setMessage(var2.toJson(var3));
         }

         super.publish(var1);
         this.flush();
      }

      @Override
      public synchronized void close() throws SecurityException {
         this.flush();
      }

      static {
         String[] var5 = new String[12];
         int var3 = 0;
         String var2 = "\u0006n A\f\u0019p6\u001e\u0005\u0017A\u0007x+V\u001b\u0007\u0006n AD\u0017V\u0007\u0000x7E\u0000\u001dW\u0007\u001ex6@\b\u0019W\t\u0010q,V\u0007\n\u001f\u001am\u000e\u0016p$Z\u0005S^\u001an1V\u0007\u001b@\n\u0001x4F\f\rF^t!\u0007\u0006n AD\u0017V\u000b\u001ft6G\f\u0010\u001f\u0003r7G";
         int var4 = "\u0006n A\f\u0019p6\u001e\u0005\u0017A\u0007x+V\u001b\u0007\u0006n AD\u0017V\u0007\u0000x7E\u0000\u001dW\u0007\u001ex6@\b\u0019W\t\u0010q,V\u0007\n\u001f\u001am\u000e\u0016p$Z\u0005S^\u001an1V\u0007\u001b@\n\u0001x4F\f\rF^t!\u0007\u0006n AD\u0017V\u000b\u001ft6G\f\u0010\u001f\u0003r7G"
            .length();
         char var1 = 4;
         int var7 = -1;

         label24:
         while (true) {
            byte var10000 = 122;
            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 = new FileOutputStream(FileDescriptor.err);
                        return;
                     }

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

                     var2 = ">X\u0016`(9w\u0013 X\u0017e =w~[\n\u007f-;`~M\u0004g!";
                     var4 = ">X\u0016`(9w\u0013 X\u0017e =w~[\n\u007f-;`~M\u0004g!".length();
                     var1 = 7;
                     var7 = -1;
               }

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

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

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

         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 -> 9;
               case 1 -> 103;
               case 2 -> 63;
               case 3 -> 73;
               case 4 -> 19;
               case 5 -> 4;
               default -> 72;
            });
         }

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