package com.l7tech.common.mime;

import com.l7tech.util.CausedIOException;
import com.l7tech.util.Charsets;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.IOUtils;
import com.l7tech.util.RandomUtil;
import com.l7tech.util.SyspropUtil;
import jakarta.mail.Header;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.InternetHeaders;
import jakarta.mail.internet.MimeUtility;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Enumeration;

public class MimeUtil {
   static final String a;
   static final boolean b = false;
   static boolean c;
   static Charset d;
   public static final String CONTENT_TYPE;
   public static final String CONTENT_LENGTH;
   public static final String CONTENT_ID;
   public static final String CONTENT_TRANSFER_ENCODING;
   public static final String DEFAULT_ENCODING;
   public static final String XML_VERSION;
   public static final String MULTIPART_CONTENT_TYPE;
   public static final String MULTIPART_TYPE;
   public static final String MULTIPART_BOUNDARY;
   public static final String MULTIPART_BOUNDARY_PREFIX;
   public static final byte[] CRLF;
   public static final String TRANSFER_ENCODING_BASE64;
   public static final String TRANSFER_ENCODING_QUOTED_PRINTABLE;
   public static final String TRANSFER_ENCODING_7BIT;
   public static final String TRANSFER_ENCODING_8BIT;
   public static final String TRANSFER_ENCODING_BINARY;
   public static final String TRANSFER_ENCODING_DEFAULT;
   private static final String[] e;

   public static MimeHeaders parseHeaders(InputStream var0) throws IOException {
      InternetHeaders var1;
      try {
         var1 = new InternetHeaders(var0);
      } catch (MessagingException var9) {
         String[] var8 = e;
         throw new CausedIOException(var8[23], var9);
      }

      MimeHeaders var2 = new MimeHeaders();
      Enumeration var3 = var1.getAllHeaders();

      while (var3.hasMoreElements()) {
         Header var4 = (Header)var3.nextElement();
         String var5 = var4.getName();
         String var6 = var4.getValue();
         if (c) {
            var6 = new String(var6.getBytes(Charsets.ISO8859), Charsets.UTF8);
         }

         MimeHeader var7;
         if (var5.equalsIgnoreCase(e[24])) {
            var7 = ContentTypeHeader.create(var6);
         } else {
            var7 = MimeHeader.parseValue(var5, var6);
         }

         var2.add(var7);
      }

      return var2;
   }

   public static byte[] randomBoundary() {
      StringBuffer var0 = new StringBuffer();
      int var1 = RandomUtil.nextInt(5);
      int var2 = 0;

      try {
         while (var2 < var1) {
            var0.append('-');
            var2++;
         }
      } catch (RuntimeException var7) {
         throw a(var7);
      }

      String[] var5 = e;
      var0.append(var5[5]);
      var2 = RandomUtil.nextInt(38) + 3;

      for (int var3 = 0; var3 < var2; var3++) {
         byte var4 = (byte)(RandomUtil.nextInt(95) + 32);

         try {
            if (e[10].indexOf(var4) < 0) {
               var0.append(new String(new byte[]{var4}));
            }
         } catch (RuntimeException var6) {
            throw a(var6);
         }
      }

      return var0.toString().getBytes();
   }

   public static byte[] makeMultipartMessage(byte[] var0, byte[][] var1, String[] var2) {
      int var3 = var1.length;
      int var4 = 192 + var0.length * var1.length;
      int var5 = 0;

      while (true) {
         label44: {
            try {
               if (var5 >= var1.length) {
                  break;
               }

               if (var1[var5] == null) {
                  break label44;
               }
            } catch (IOException var10) {
               throw a(var10);
            }

            var4 += var1[var5].length;
         }

         if (var2[var5] != null) {
            var4 += var2[var5].length();
         }

         var5++;
      }

      if (var4 < 256) {
         var4 = 256;
      }

      try {
         ByteArrayOutputStream var11 = new ByteArrayOutputStream(var4);
         String var10001 = new String(var0);
         String[] var7 = e;
         var11.write((var7[3] + var10001 + "\"").getBytes());
         var11.write(CRLF);
         var11.write(CRLF);
         int var6 = 0;

         try {
            while (var6 < var3) {
               var11.write(CRLF);
               var11.write(e[15].getBytes());
               var11.write(var0);
               var11.write(CRLF);
               var11.write((e[26] + var1[var6].length).getBytes());
               var11.write(CRLF);
               var11.write((e[22] + var2[var6]).getBytes());
               var11.write(CRLF);
               var11.write(CRLF);
               var11.write(var1[var6]);
               var6++;
            }
         } catch (IOException var8) {
            throw a(var8);
         }

         var11.write(CRLF);
         var7 = e;
         var11.write(var7[14].getBytes());
         var11.write(var0);
         var11.write(var7[14].getBytes());
         var11.write(CRLF);
         return var11.toByteArray();
      } catch (IOException var9) {
         throw new RuntimeException(var9);
      }
   }

   public static InputStream getEncodingInputStream(byte[] var0, String var1) {
      return getEncodingInputStream(var0, 0, var0.length, var1);
   }

   public static InputStream getEncodingInputStream(byte[] var0, int var1, int var2, String var3) {
      return IOUtils.toInputStream(var0, var1, var2, new l(var3));
   }

   public static InputStream getDecodingInputStream(InputStream var0, String var1) throws IOException {
      try {
         return MimeUtility.decode(var0, var1);
      } catch (MessagingException var3) {
         throw new IOException(ExceptionUtils.getMessage(var3), var3);
      }
   }

   public static boolean isProcessedTransferEncoding(String param0) {
      // $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: getstatic com/l7tech/common/mime/MimeUtil.e [Ljava/lang/String;
      // 03: bipush 17
      // 05: aaload
      // 06: aload 0
      // 07: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 0a: ifne 21
      // 0d: getstatic com/l7tech/common/mime/MimeUtil.e [Ljava/lang/String;
      // 10: bipush 13
      // 12: aaload
      // 13: aload 0
      // 14: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 17: ifeq 29
      // 1a: goto 21
      // 1d: invokestatic com/l7tech/common/mime/MimeUtil.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 20: athrow
      // 21: bipush 1
      // 22: goto 2a
      // 25: invokestatic com/l7tech/common/mime/MimeUtil.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 28: athrow
      // 29: bipush 0
      // 2a: ireturn
      // try (0 -> 12): 13 java/lang/RuntimeException
      // try (6 -> 17): 17 java/lang/RuntimeException
   }

   public static boolean isIdentityTransferEncoding(String param0) {
      // $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: getstatic com/l7tech/common/mime/MimeUtil.e [Ljava/lang/String;
      // 03: bipush 6
      // 05: aaload
      // 06: aload 0
      // 07: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 0a: ifne 35
      // 0d: getstatic com/l7tech/common/mime/MimeUtil.e [Ljava/lang/String;
      // 10: bipush 12
      // 12: aaload
      // 13: aload 0
      // 14: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 17: ifne 35
      // 1a: goto 21
      // 1d: invokestatic com/l7tech/common/mime/MimeUtil.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 20: athrow
      // 21: getstatic com/l7tech/common/mime/MimeUtil.e [Ljava/lang/String;
      // 24: bipush 28
      // 26: aaload
      // 27: aload 0
      // 28: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 2b: ifeq 3d
      // 2e: goto 35
      // 31: invokestatic com/l7tech/common/mime/MimeUtil.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 34: athrow
      // 35: bipush 1
      // 36: goto 3e
      // 39: invokestatic com/l7tech/common/mime/MimeUtil.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3c: athrow
      // 3d: bipush 0
      // 3e: ireturn
      // try (0 -> 12): 13 java/lang/RuntimeException
      // try (6 -> 21): 22 java/lang/RuntimeException
      // try (15 -> 26): 26 java/lang/RuntimeException
   }

   static void a() {
      Charset var10000;
      label16: {
         try {
            c = SyspropUtil.getBoolean(e[2], false);
            if (c) {
               var10000 = Charsets.UTF8;
               break label16;
            }
         } catch (RuntimeException var0) {
            throw a(var0);
         }

         var10000 = Charsets.ISO8859;
      }

      d = var10000;
   }

   static {
      String[] var5 = new String[31];
      int var3 = 0;
      String var2 = "H7@~a,0&\f\\kj1\"n*\u0003Oj!+o1@m\u0010z-A~a&i{*Gdp#&g=\"h7C$hu0n;F$g-)f7@$i+)nvXkh7!xv[~bz+H7@~a,0&\fWzaxdf-B~m2%y,\u0001xa.%\u007f=J1$ +~6Jkv;y)\u0011f-B~m2%y,\u0001xa.%\u007f=J\u00026\u0007\u0004<:G~\u000eH7@~a,0&\u0014Kdc6,\nH7@~a,0&\u0011J\u0006i1@kv;\u0011#q\u00124Dn\u007f1\u0004\f\u0003$\u0019\u0019$g\u0013\bi7[d`#6r\u00043:G~\u0010z-A~a&i{*Gdp#&g=\u0002&u\u0002&u\u0002\u0006R\u0006i9]o2v\u0003:v\u001e\u0006i9]o2v\u0004<:G~\fH7@~a,0&\fWza\u000eH7@~a,0&\fWzaxd\u001bH7[f`,c\u007fx^kv1!+\u0015gGAb,n9Jov1\fH7@~a,0&\fWza\u0004\u007f!^o\u0010H7@~a,0&\u0014Kdc6,1x\u00043:G~\u0006i1@kv;";
      int var4 = "H7@~a,0&\f\\kj1\"n*\u0003Oj!+o1@m\u0010z-A~a&i{*Gdp#&g=\"h7C$hu0n;F$g-)f7@$i+)nvXkh7!xv[~bz+H7@~a,0&\fWzaxdf-B~m2%y,\u0001xa.%\u007f=J1$ +~6Jkv;y)\u0011f-B~m2%y,\u0001xa.%\u007f=J\u00026\u0007\u0004<:G~\u000eH7@~a,0&\u0014Kdc6,\nH7@~a,0&\u0011J\u0006i1@kv;\u0011#q\u00124Dn\u007f1\u0004\f\u0003$\u0019\u0019$g\u0013\bi7[d`#6r\u00043:G~\u0010z-A~a&i{*Gdp#&g=\u0002&u\u0002&u\u0002\u0006R\u0006i9]o2v\u0003:v\u001e\u0006i9]o2v\u0004<:G~\fH7@~a,0&\fWza\u000eH7@~a,0&\fWzaxd\u001bH7[f`,c\u007fx^kv1!+\u0015gGAb,n9Jov1\fH7@~a,0&\fWza\u0004\u007f!^o\u0010H7@~a,0&\u0014Kdc6,1x\u00043:G~\u0006i1@kv;"
         .length();
      char var1 = 25;
      int var8 = -1;

      label39:
      while (true) {
         byte var10000 = 103;
         String var10001 = var2.substring(++var8, var8 + var1);
         byte var10002 = -1;

         while (true) {
            String var9 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var8 += var1) >= var4) {
                     e = var5;
                     String[] var10 = e;
                     TRANSFER_ENCODING_8BIT = e[27];
                     CONTENT_TYPE = var10[21];
                     DEFAULT_ENCODING = var10[29];
                     MULTIPART_BOUNDARY_PREFIX = var10[14];
                     a = var10[30];
                     TRANSFER_ENCODING_BASE64 = var10[19];
                     MULTIPART_CONTENT_TYPE = var10[4];
                     TRANSFER_ENCODING_DEFAULT = var10[20];
                     MULTIPART_BOUNDARY = var10[11];
                     TRANSFER_ENCODING_7BIT = var10[20];
                     CONTENT_LENGTH = var10[7];
                     TRANSFER_ENCODING_QUOTED_PRINTABLE = var10[1];
                     MULTIPART_TYPE = var10[25];
                     XML_VERSION = var10[18];
                     CONTENT_ID = var10[8];
                     CONTENT_TRANSFER_ENCODING = var10[0];
                     TRANSFER_ENCODING_BINARY = var10[9];

                     label26: {
                        try {
                           c = SyspropUtil.getBoolean(e[30], false);
                           if (c) {
                              var11 = Charsets.UTF8;
                              break label26;
                           }
                        } catch (RuntimeException var6) {
                           throw a(var6);
                        }

                        var11 = Charsets.ISO8859;
                     }

                     d = var11;
                     CRLF = e[16].getBytes();
                     return;
                  }

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

                  var2 = "\u0018J.az\".q\u0005b.3v(}\u0000b!ko q\u0006b/mo(0\u001e-.qg>0\u001d8$<";
                  var4 = "\u0018J.az\".q\u0005b.3v(}\u0000b!ko q\u0006b/mo(0\u001e-.qg>0\u001d8$<".length();
                  var1 = 5;
                  var8 = -1;
            }

            var10000 = 33;
            var10001 = var2.substring(++var8, var8 + 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] ^ 35);
      }

      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 -> 108;
            case 1 -> 63;
            case 2 -> 73;
            case 3 -> 109;
            case 4 -> 99;
            case 5 -> 37;
            default -> 35;
         });
      }

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