package com.l7tech.server.audit;

import com.l7tech.objectmodel.Goid;
import com.l7tech.util.OpaqueId;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.Timer;
import java.util.logging.Level;
import java.util.logging.Logger;

class q {
   private final OpaqueId a = new OpaqueId();
   private final X509Certificate b;
   private final PrivateKey c;
   private final PipedOutputStream d = new PipedOutputStream();
   private final PipedInputStream e = new PipedInputStream(this.d);
   private final Timer f;
   private final long g;
   private final long h;
   private final Goid[] i;
   private final int j;
   private final Thread k;
   private final AuditExporter l;
   private volatile Throwable m;
   private long n;
   private final Object o;
   private static final String[] p;

   private q(long var1, long var3, Goid[] var5, int var6, AuditExporter var7, X509Certificate var8, PrivateKey var9) throws IOException {
      String[] var10 = p;
      this.f = new Timer(var10[1], true);
      this.k = new Thread(new r(this));
      this.m = null;
      this.n = System.currentTimeMillis();
      this.o = new Object();
      if (var6 < 1) {
         var6 = 8192;
      }

      this.g = var1;
      this.h = var3;
      this.i = var5;
      this.j = var6;
      this.b = var8;
      this.c = var9;
      this.l = var7;
      this.k.start();
      AuditDownloadManager.a.info(p[9] + this);
   }

   synchronized OpaqueId a() {
      return this.a;
   }

   synchronized long b() {
      return this.n;
   }

   synchronized InputStream c() {
      return this.e;
   }

   private synchronized void d() {
      this.n = System.currentTimeMillis();
   }

   private s a(PipedInputStream var1, byte[] var2, long var3) throws IOException {
      int var5 = 0;
      int var6 = var2.length;
      Thread var7 = Thread.currentThread();
      boolean[] var8 = new boolean[]{true};
      synchronized (this) {
         var8[0] = true;
      }

      ax var9 = new ax(this, var8, var7);

      try {
         this.f.schedule(var9, var3);

         while (var6 > 0) {
            try {
               int var10 = var1.read(var2, var5, var6);
               if (var10 < 0) {
                  return new s(this, var5, true);
               }

               try {
                  if (var10 == 0) {
                     Thread.sleep(250L);
                  }
               } catch (InterruptedIOException var32) {
                  throw a(var32);
               }

               var5 += var10;
               var6 -= var10;
            } catch (InterruptedIOException var33) {
               return new s(this, var5, false);
            } catch (InterruptedException var34) {
               return new s(this, var5, false);
            }
         }

         return new s(this, var5, false);
      } finally {
         synchronized (this) {
            var8[0] = false;
            var9.cancel();
            Thread.interrupted();
         }
      }
   }

   private byte[] e() {
      synchronized (this.o) {
         return this.h();
      }
   }

   private long f() {
      long var1 = 1L;
      synchronized (this) {
         if (this.l != null) {
            var1 = this.l.getApproxNumToExport();
         }

         return var1;
      }
   }

   private long g() {
      long var1 = 0L;
      synchronized (this) {
         if (this.l != null) {
            var1 = this.l.getNumExportedSoFar();
         }

         return var1;
      }
   }

   private byte[] h() {
      this.d();
      this.checkForException();
      byte[] var1 = new byte[this.j];

      try {
         s var2 = this.a(this.e, var1, 10000L);
         Logger var10000 = AuditDownloadManager.a;
         Level var10001 = Level.FINER;
         String var10002 = String.valueOf(this);
         String[] var10 = p;
         var10000.log(var10001, var10[2] + var10002);
         int var3 = var2.a;

         try {
            if (var2.b) {
               this.k.join(5000L);
               this.checkForException();
               if (var3 == 0) {
                  return null;
               }
            }
         } catch (IOException var7) {
            throw a(var7);
         }

         byte[] var4 = new byte[var3];

         try {
            if (var3 > 0) {
               System.arraycopy(var1, 0, var4, 0, var3);
            }
         } catch (IOException var6) {
            throw a(var6);
         }

         this.d();
         this.checkForException();
         return var4;
      } catch (IOException var8) {
         this.close();
         String[] var5 = p;
         throw new RuntimeException(var5[4], var8);
      } catch (InterruptedException var9) {
         this.close();
         throw new RuntimeException(p[8], var9);
      }
   }

   public void checkForException() {
      Throwable var1 = this.getProducerException();

      try {
         if (var1 != null) {
            this.close();
            throw new RuntimeException(p[6] + var1.getMessage(), var1);
         }
      } catch (RuntimeException var2) {
         throw a(var2);
      }
   }

   public synchronized void close() {
      AuditDownloadManager.a.log(Level.INFO, p[7] + this);
      AuditDownloadManager.d.remove(this.a());

      try {
         this.k.interrupt();
      } catch (Throwable var4) {
      }

      try {
         this.e.close();
      } catch (Throwable var3) {
      }

      try {
         this.d.close();
      } catch (Throwable var2) {
      }
   }

   @Override
   public synchronized boolean equals(Object var1) {
      try {
         if (this == var1) {
            return true;
         }
      } catch (RuntimeException var4) {
         throw a(var4);
      }

      try {
         if (!(var1 instanceof q)) {
            return false;
         }
      } catch (RuntimeException var5) {
         throw a(var5);
      }

      q var2 = (q)var1;

      try {
         return this.a.equals(var2.a);
      } catch (RuntimeException var3) {
         throw a(var3);
      }
   }

   @Override
   public synchronized int hashCode() {
      return this.a.hashCode();
   }

   @Override
   public synchronized String toString() {
      String var10000 = this.a.toString();
      String var10001 = String.valueOf(new Date(this.g));
      String var1 = String.valueOf(new Date(this.h));
      String var2 = var10001;
      String var3 = var10000;
      String[] var4 = p;
      return var4[0] + var3 + var4[3] + var2 + var4[5] + var1 + "]";
   }

   public synchronized Throwable getProducerException() {
      return this.m;
   }

   public synchronized void setProducerException(Throwable var1) {
      this.m = var1;
   }

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

   static {
      String[] var5 = new String[10];
      int var3 = 0;
      String var2 = "_=\n\u0005\u0001^\u000b\u007f\u0011\u0012\u0005\u0019T\u0012ozT0\u0004UW\u0014_=\n\u0005\u0001^\u000b\u007f\u0011\u0012\u0005\u0019T\u0012o\u0006\u0014\u0006\bC0I7\t\u001e\u001f_\u0003u5]\u0005\bI\u001e;3\b\u000f\u0004EJ\u007f=\n\u0005\u0001^\u000b\u007fr\u001e\u0003\u0018_\u0001;4\u0012\u0019MR\u0005u&\u0018\u0013\u0019\u0011\u00077r\u001b\u0019\u0002\\W$N<\u001c\t\u0001TJo=]\u0019\bP\u000e;7\u0005\u001b\u0002C\u001e~6]\n\u0018U\u0003or\u000e\u001f\u001fT\u000bv\u0005 r\t\u0004P&Z'\u0019\u0002\u0019\u0011Da;\rK\u001dC\u0005\u007f'\u001e\u000e\u001f\u0011\u001es \u0018\n\t\u0011\u000fc1\u0018\u001b\u0019X\u0005uh]\u001fX>\u0012\u0018\u0004_\r;3\b\u000f\u0004EJ\u007f=\n\u0005\u0001^\u000b\u007fr\u001e\u0004\u0003E\u000fc&]";
      int var4 = "_=\n\u0005\u0001^\u000b\u007f\u0011\u0012\u0005\u0019T\u0012ozT0\u0004UW\u0014_=\n\u0005\u0001^\u000b\u007f\u0011\u0012\u0005\u0019T\u0012o\u0006\u0014\u0006\bC0I7\t\u001e\u001f_\u0003u5]\u0005\bI\u001e;3\b\u000f\u0004EJ\u007f=\n\u0005\u0001^\u000b\u007fr\u001e\u0003\u0018_\u0001;4\u0012\u0019MR\u0005u&\u0018\u0013\u0019\u0011\u00077r\u001b\u0019\u0002\\W$N<\u001c\t\u0001TJo=]\u0019\bP\u000e;7\u0005\u001b\u0002C\u001e~6]\n\u0018U\u0003or\u000e\u001f\u001fT\u000bv\u0005 r\t\u0004P&Z'\u0019\u0002\u0019\u0011Da;\rK\u001dC\u0005\u007f'\u001e\u000e\u001f\u0011\u001es \u0018\n\t\u0011\u000fc1\u0018\u001b\u0019X\u0005uh]\u001fX>\u0012\u0018\u0004_\r;3\b\u000f\u0004EJ\u007f=\n\u0005\u0001^\u000b\u007fr\u001e\u0004\u0003E\u000fc&]"
         .length();
      char var1 = 21;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 65;
         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) {
                     p = var5;
                     return;
                  }

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

                  var2 = "3Aat|)7\u0012@ du-sFJxf\u007f>c\u0003K we(~\u0012\u000fsbb)v\u000b\u001f%]ewd)sFNury87\u0002@wx|#v\u0002\u000fcy~8r\u001e[ ";
                  var4 = "3Aat|)7\u0012@ du-sFJxf\u007f>c\u0003K we(~\u0012\u000fsbb)v\u000b\u001f%]ewd)sFNury87\u0002@wx|#v\u0002\u000fcy~8r\u001e[ ".length();
                  var1 = '$';
                  var7 = -1;
            }

            var10000 = 60;
            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] ^ 43);
      }

      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 -> 90;
            case 1 -> 19;
            case 2 -> 60;
            case 3 -> 42;
            case 4 -> 44;
            case 5 -> 112;
            default -> 43;
         });
      }

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