package com.l7tech.server.log.syslog.impl;

import com.l7tech.server.log.syslog.ManagedSyslog;
import com.l7tech.server.log.syslog.SyslogConfig;
import com.l7tech.server.log.syslog.SyslogSeverity;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.mina.util.ExceptionMonitor;

public class MinaManagedSyslog extends ManagedSyslog {
   private static final Logger d;
   private ReentrantLock e = new ReentrantLock();
   private List<e> f;
   private final BlockingQueue<f> g;
   private final b h;
   private boolean i = false;
   private ExecutorService j = Executors.newSingleThreadExecutor();
   private SyslogConfig k;
   private static final String[] l;

   public MinaManagedSyslog(SyslogConfig var1) {
      this.k = var1;
      this.g = new LinkedBlockingQueue<>(this.k.getQueueSize());
      this.f = new ArrayList<>(this.k.getDropSize());
      this.h = new b(this.k, this.g);
   }

   MinaManagedSyslog(SyslogConfig var1, b var2) {
      this.k = var1;
      this.g = new LinkedBlockingQueue<>(this.k.getQueueSize());
      this.f = new ArrayList<>(this.k.getDropSize());
      this.h = var2;
   }

   @Override
   public void log(ManagedSyslog.SyslogFormat var1, int var2, SyslogSeverity var3, String var4, String var5, long var6, long var8, String var10) {
      if (this.h.b()) {
         f var11 = this.a(var1, var2, var3, var4, var5, var6, var8, var10);
         if (!this.g.offer(var11)) {
            try {
               this.e.lock();
               if (!this.g.offer(var11)) {
                  this.g.drainTo(this.f, this.k.getDropSize());
                  this.f.clear();
                  this.g.add(var11);
                  d.log(Level.WARNING, l[0], new Object[]{this.k.getQueueSize(), this.k.getDropSize(), this.g.remainingCapacity()});
               }
            } finally {
               this.e.unlock();
            }
         }
      }
   }

   int d() {
      return this.g.size();
   }

   @Override
   public void close() {
      this.g.clear();
      this.h.a();
      this.j.shutdownNow();
   }

   @Override
   protected void init() {
      if (!this.i) {
         this.i = true;
         this.h.a(this.getSyslogConnectionListener());
         this.j.execute(this.h);
         d.log(Level.INFO, l[1], this.k.getQueueSize());
      }
   }

   private f a(ManagedSyslog.SyslogFormat var1, int var2, SyslogSeverity var3, String var4, String var5, long var6, long var8, String var10) {
      return new f(var1, var2, var3.getSeverity(), var4, var5, var6, var8, var10);
   }

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "7yV\u0011;/\u0019\teV\u000e5/\\DqP\u0018!-\u0019\rs\u0005\u001b!$UD(^M)a\u0015DdW\u0012$8\\\u0000 ^L)hV\bd@\u000e hT\u0001sV\u001c3-JJ k\u0018#hJ\u001dsI\u00123hT\u0001sV\u001c3-\u0019\u0015u@\b1hK\u0001mD\u0014:!W\u0003 F\u001c$)Z\rt\\]=;\u0019\u001f2XS,-nL\t=)U\rz@]'1J\boB]9-J\u0017aB\u0018t9L\u0001u@]'!C\u0001 Q\u0012t3\t\u0019.";
      int var4 = "7yV\u0011;/\u0019\teV\u000e5/\\DqP\u0018!-\u0019\rs\u0005\u001b!$UD(^M)a\u0015DdW\u0012$8\\\u0000 ^L)hV\bd@\u000e hT\u0001sV\u001c3-JJ k\u0018#hJ\u001dsI\u00123hT\u0001sV\u001c3-\u0019\u0015u@\b1hK\u0001mD\u0014:!W\u0003 F\u001c$)Z\rt\\]=;\u0019\u001f2XS,-nL\t=)U\rz@]'1J\boB]9-J\u0017aB\u0018t9L\u0001u@]'!C\u0001 Q\u0012t3\t\u0019."
         .length();
      char var1 = 't';
      int var0 = -1;

      while (true) {
         String var10002 = b(124, b(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            l = var5;
            d = Logger.getLogger(MinaManagedSyslog.class.getName());
            ExceptionMonitor.setInstance(new i());
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

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

      return var10000;
   }

   private static String b(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 -> 24;
            case 1 -> 124;
            case 2 -> 89;
            case 3 -> 1;
            case 4 -> 40;
            case 5 -> 52;
            default -> 69;
         });
      }

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