package com.l7tech.common.mime;

import com.l7tech.util.IOUtils;
import com.l7tech.util.PoolByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

public class ByteArrayStashManager implements StashManager {
   private final ArrayList<c> a = new ArrayList<>();
   private ArrayList<IOException> b = new ArrayList<>();
   private static final String[] c;

   // $VF: Could not verify finally blocks. A semaphore variable has been added to preserve control flow.
   // 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!)
   @Override
   public void stash(int var1, InputStream var2) throws IOException {
      PoolByteArrayOutputStream var3 = null;

      while (true) {
         boolean var11 = false /* VF: Semaphore variable */;

         try {
            try {
               var11 = true;
               if (this.b.size() <= var1) {
                  this.b.add(null);
                  continue;
               }
            } catch (IOException var13) {
               throw a(var13);
            }

            var3 = new PoolByteArrayOutputStream(4096);
            IOUtils.copyStream(var2, var3);
            int var4 = var3.size();
            byte[] var5 = var3.detachPooledByteArray();
            this.stash(var1, var5, 0, var4);
            var11 = false;
            break;
         } catch (IOException var14) {
            this.b.set(var1, var14);
            throw var14;
         } finally {
            if (var11) {
               try {
                  if (var3 != null) {
                     var3.close();
                  }
               } catch (IOException var12) {
                  throw a(var12);
               }
            }
         }
      }

      if (var3 != null) {
         var3.close();
      }
   }

   @Override
   public void stash(int var1, byte[] var2) {
      this.stash(var1, var2, 0, var2 != null ? var2.length : 0);
   }

   @Override
   public void stash(int var1, byte[] var2, int var3, int var4) {
      while (this.a.size() <= var1) {
         this.a.add(null);
      }

      while (this.b.size() <= var1) {
         this.b.add(null);
      }

      c var5;
      if (var2 != null) {
         var5 = this.a.set(var1, new c(var2, var3, var4));
      } else {
         var5 = this.a.set(var1, null);
      }

      this.b.set(var1, null);
      if (var5 != null) {
         var5.d();
      }
   }

   @Override
   public void unstash(int var1) {
      if (this.a.size() > var1 && var1 >= 0) {
         c var2 = this.a.set(var1, null);
         if (var2 != null) {
            var2.d();
         }

         if (this.b.size() <= var1 || var1 < 0) {
            this.b.set(var1, null);
         }
      }
   }

   @Override
   public long getSize(int var1) {
      try {
         c var2 = this.b(var1);
         return var2.c;
      } catch (NoSuchPartException var3) {
         return -1L;
      }
   }

   @Override
   public InputStream recall(int var1) throws IOException, NoSuchPartException {
      this.a(var1);
      c var2 = this.b(var1);
      return new ByteArrayInputStream(var2.a, var2.b, var2.c);
   }

   private void a(int param1) throws IOException {
      // $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: getfield com/l7tech/common/mime/ByteArrayStashManager.b Ljava/util/ArrayList;
      // 04: invokevirtual java/util/ArrayList.size ()I
      // 07: iload 1
      // 08: if_icmple 16
      // 0b: iload 1
      // 0c: ifge 1b
      // 0f: goto 16
      // 12: invokestatic com/l7tech/common/mime/ByteArrayStashManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 15: athrow
      // 16: return
      // 17: invokestatic com/l7tech/common/mime/ByteArrayStashManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1a: athrow
      // 1b: aload 0
      // 1c: getfield com/l7tech/common/mime/ByteArrayStashManager.b Ljava/util/ArrayList;
      // 1f: iload 1
      // 20: invokevirtual java/util/ArrayList.get (I)Ljava/lang/Object;
      // 23: checkcast java/io/IOException
      // 26: astore 2
      // 27: aload 2
      // 28: ifnull 31
      // 2b: aload 2
      // 2c: athrow
      // 2d: invokestatic com/l7tech/common/mime/ByteArrayStashManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 30: athrow
      // 31: return
      // try (0 -> 7): 8 java/io/IOException
      // try (5 -> 11): 11 java/io/IOException
      // try (19 -> 23): 23 java/io/IOException
   }

   @Override
   public boolean isByteArrayAvailable(int var1) {
      return this.peek(var1);
   }

   @Override
   public byte[] recallBytes(int var1) throws NoSuchPartException {
      c var2 = this.b(var1);

      try {
         if (var2.a()) {
            var2.c();
            return var2.a;
         }
      } catch (NoSuchPartException var5) {
         throw a(var5);
      }

      byte[] var3 = new byte[var2.c];

      try {
         if (var3.length > 0) {
            System.arraycopy(var2.a, var2.b, var3, 0, var3.length);
         }
      } catch (NoSuchPartException var4) {
         throw a(var4);
      }

      this.stash(var1, var3);
      var2 = this.b(var1);
      var2.c();
      return var2.a;
   }

   @Override
   public boolean peek(int var1) {
      if (this.a.size() > var1 && var1 >= 0) {
         c var2 = this.a.get(var1);
         return var2 != null;
      } else {
         return false;
      }
   }

   @Override
   public int getMaxOrdinal() {
      return this.a.size();
   }

   @Override
   public void close() {
      ArrayList var1 = new ArrayList<>(this.a);
      this.a.clear();

      for (c var3 : var1) {
         if (var3 != null) {
            var3.d();
         }
      }
   }

   private c b(int param1) throws NoSuchPartException {
      // $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: getfield com/l7tech/common/mime/ByteArrayStashManager.a Ljava/util/ArrayList;
      // 04: invokevirtual java/util/ArrayList.size ()I
      // 07: iload 1
      // 08: if_icmple 16
      // 0b: iload 1
      // 0c: ifge 2e
      // 0f: goto 16
      // 12: invokestatic com/l7tech/common/mime/ByteArrayStashManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 15: athrow
      // 16: new com/l7tech/common/mime/NoSuchPartException
      // 19: dup
      // 1a: iload 1
      // 1b: getstatic com/l7tech/common/mime/ByteArrayStashManager.c [Ljava/lang/String;
      // 1e: bipush 1
      // 1f: aaload
      // 20: swap
      // 21: invokedynamic makeConcatWithConstants (Ljava/lang/String;I)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 26: invokespecial com/l7tech/common/mime/NoSuchPartException.<init> (Ljava/lang/String;)V
      // 29: athrow
      // 2a: invokestatic com/l7tech/common/mime/ByteArrayStashManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2d: athrow
      // 2e: aload 0
      // 2f: getfield com/l7tech/common/mime/ByteArrayStashManager.a Ljava/util/ArrayList;
      // 32: iload 1
      // 33: invokevirtual java/util/ArrayList.get (I)Ljava/lang/Object;
      // 36: checkcast com/l7tech/common/mime/c
      // 39: astore 2
      // 3a: aload 2
      // 3b: ifnonnull 56
      // 3e: new com/l7tech/common/mime/NoSuchPartException
      // 41: dup
      // 42: iload 1
      // 43: getstatic com/l7tech/common/mime/ByteArrayStashManager.c [Ljava/lang/String;
      // 46: bipush 0
      // 47: aaload
      // 48: swap
      // 49: invokedynamic makeConcatWithConstants (Ljava/lang/String;I)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 4e: invokespecial com/l7tech/common/mime/NoSuchPartException.<init> (Ljava/lang/String;)V
      // 51: athrow
      // 52: invokestatic com/l7tech/common/mime/ByteArrayStashManager.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 55: athrow
      // 56: aload 2
      // 57: areturn
      // try (0 -> 7): 8 com/l7tech/common/mime/NoSuchPartException
      // try (5 -> 20): 20 com/l7tech/common/mime/NoSuchPartException
      // try (28 -> 40): 40 com/l7tech/common/mime/NoSuchPartException
   }

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

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "\u0005q,\u0007\u0000DKkmx\u0016\u0012^Z/>{\u001e\u0015^\u001f?viW\u000eD[\"pm\u001bA!\u0005q,\u0007\u0000DKkmx\u0016\u0012^Z/>{\u001e\u0015^\u001f?viW\u000eD[\"pm\u001bA";
      int var4 = "\u0005q,\u0007\u0000DKkmx\u0016\u0012^Z/>{\u001e\u0015^\u001f?viW\u000eD[\"pm\u001bA!\u0005q,\u0007\u0000DKkmx\u0016\u0012^Z/>{\u001e\u0015^\u001f?viW\u000eD[\"pm\u001bA"
         .length();
      char var1 = '!';
      int var0 = -1;

      while (true) {
         String var10002 = a(81, a(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            c = var5;
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

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

      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 -> 26;
            case 1 -> 79;
            case 2 -> 93;
            case 3 -> 38;
            case 4 -> 48;
            case 5 -> 103;
            default -> 110;
         });
      }

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