package com.l7tech.common.io;

import com.l7tech.util.DeserializeSafe;
import com.l7tech.util.InetAddressUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.jetbrains.annotations.NotNull;

@DeserializeSafe
public class X509GeneralName implements Serializable {
   private final X509GeneralName.Type type;
   private final String stringVal;
   private final byte[] derVal;
   static final long serialVersionUID = 8615683297017117168L;
   private static final String[] a;

   // $VF: Handled exception range with multiple entry points by splitting it
   // $VF: Duplicated exception handlers to handle obfuscated exceptions
   public X509GeneralName(X509GeneralName.Type var1, String var2) {
      label17: {
         if (var1 != null) {
            try {
               if (var2 != null) {
                  break label17;
               }
            } catch (NullPointerException var4) {
               throw a(var4);
            }
         }

         try {
            throw new NullPointerException();
         } catch (NullPointerException var3) {
            throw a(var3);
         }
      }

      this.type = var1;
      this.stringVal = var2;
      this.derVal = null;
   }

   // $VF: Handled exception range with multiple entry points by splitting it
   // $VF: Duplicated exception handlers to handle obfuscated exceptions
   public X509GeneralName(X509GeneralName.Type var1, byte[] var2) {
      label17: {
         if (var1 != null) {
            try {
               if (var2 != null) {
                  break label17;
               }
            } catch (NullPointerException var4) {
               throw a(var4);
            }
         }

         try {
            throw new NullPointerException();
         } catch (NullPointerException var3) {
            throw a(var3);
         }
      }

      this.type = var1;
      this.derVal = var2;
      this.stringVal = null;
   }

   public X509GeneralName(List<?> var1) {
      this.type = X509GeneralName.Type.fromTag((Integer)var1.get(0));
      Object var2 = var1.get(1);

      try {
         if (var2 instanceof String) {
            this.stringVal = (String)var2;
            this.derVal = null;
            return;
         }
      } catch (NullPointerException var4) {
         throw a(var4);
      }

      try {
         if (var2 instanceof byte[]) {
            this.derVal = (byte[])var2;
            this.stringVal = null;
            return;
         }
      } catch (NullPointerException var5) {
         throw a(var5);
      }

      ClassCastException var10000;
      ClassCastException var10001;
      String var10002;
      label26: {
         try {
            var10000 = new ClassCastException;
            var10001 = var10000;
            if (var2 == null) {
               var10002 = a[0];
               break label26;
            }
         } catch (NullPointerException var3) {
            throw a(var3);
         }

         var10002 = var2.getClass().toString();
      }

      var10001./* $VF: Unable to resugar constructor */<init>(a[1] + var10002);
      throw var10000;
   }

   public X509GeneralName.Type getType() {
      return this.type;
   }

   public boolean isString() {
      try {
         if (this.stringVal != null) {
            return true;
         }
      } catch (NullPointerException var1) {
         throw a(var1);
      }

      return false;
   }

   public String getStringVal() {
      return this.stringVal;
   }

   public byte[] getDerVal() {
      return this.derVal;
   }

   public static X509GeneralName fromDnsName(String var0) {
      return new X509GeneralName(X509GeneralName.Type.dNSName, var0);
   }

   public static X509GeneralName fromDirectoryName(String var0) {
      return new X509GeneralName(X509GeneralName.Type.directoryName, var0);
   }

   public static X509GeneralName fromIpAddress(String var0) {
      return new X509GeneralName(X509GeneralName.Type.iPAddress, var0);
   }

   public static X509GeneralName fromHostNameOrIp(String var0) {
      try {
         if (InetAddressUtil.looksLikeIpAddressV4OrV6(var0)) {
            return fromIpAddress(var0);
         }
      } catch (NullPointerException var1) {
         throw a(var1);
      }

      return fromDnsName(var0);
   }

   public static List<X509GeneralName> fromList(Collection<List<?>> var0) {
      ArrayList var1 = new ArrayList();

      for (List var3 : var0) {
         var1.add(new X509GeneralName(var3));
      }

      return var1;
   }

   public static List<X509GeneralName> fromHostNamesOrIps(List<String> var0) {
      ArrayList var1 = new ArrayList();

      for (String var3 : var0) {
         var1.add(fromHostNameOrIp(var3));
      }

      return var1;
   }

   public static X509GeneralName.Type getTypeFromTag(int var0) {
      return X509GeneralName.Type.fromTag(var0);
   }

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

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "4+\u0004\u00177\u001d;\u0006\u001eM\n\n\u0014?\u0005\u001e\u001f\u001d\u00076+\r[R\u001e\u0015.~\n\u001e\u001f\u000e\u000f.6\r\t\u001f8\u0012(7\u0006\u001c\u001f\u0004\u0014z<\u0011\u000fZ0;a~\u001f\u001aLK";
      int var4 = "4+\u0004\u00177\u001d;\u0006\u001eM\n\n\u0014?\u0005\u001e\u001f\u001d\u00076+\r[R\u001e\u0015.~\n\u001e\u001f\u000e\u000f.6\r\t\u001f8\u0012(7\u0006\u001c\u001f\u0004\u0014z<\u0011\u000fZ0;a~\u001f\u001aLK"
         .length();
      char var1 = 4;
      int var0 = -1;

      while (true) {
         String var10002 = a(101, a(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            a = 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] ^ 3);
      }

      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 -> 63;
            case 1 -> 59;
            case 2 -> 13;
            case 3 -> 30;
            case 4 -> 90;
            case 5 -> 14;
            default -> 3;
         });
      }

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

   public enum Type {
      otherName,
      rfc822Name,
      dNSName,
      x400Address,
      directoryName,
      ediPartyName,
      uniformResourceIdentifier,
      iPAddress,
      registeredID;

      private static X509GeneralName.Type[] BY_TAG;
      private final int tag;
      private final String userFriendlyName;
      private static final String[] a;

      Type(int var3, String var4) {
         this.tag = var3;
         this.userFriendlyName = var4;
      }

      public int getTag() {
         return this.tag;
      }

      public String getUserFriendlyName() {
         return this.userFriendlyName;
      }

      public static X509GeneralName.Type fromTag(int 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: iload 0
         // 01: iflt 13
         // 04: iload 0
         // 05: getstatic com/l7tech/common/io/X509GeneralName$Type.BY_TAG [Lcom/l7tech/common/io/X509GeneralName$Type;
         // 08: arraylength
         // 09: if_icmplt 25
         // 0c: goto 13
         // 0f: invokestatic com/l7tech/common/io/X509GeneralName$Type.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 12: athrow
         // 13: new java/lang/IllegalArgumentException
         // 16: dup
         // 17: getstatic com/l7tech/common/io/X509GeneralName$Type.a [Ljava/lang/String;
         // 1a: bipush 6
         // 1c: aaload
         // 1d: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
         // 20: athrow
         // 21: invokestatic com/l7tech/common/io/X509GeneralName$Type.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 24: athrow
         // 25: getstatic com/l7tech/common/io/X509GeneralName$Type.BY_TAG [Lcom/l7tech/common/io/X509GeneralName$Type;
         // 28: iload 0
         // 29: aaload
         // 2a: areturn
         // try (0 -> 6): 7 java/lang/IllegalArgumentException
         // try (2 -> 16): 16 java/lang/IllegalArgumentException
      }

      public static X509GeneralName.Type fromUserName(@NotNull String var0) {
         try {
            if (var0 == null) {
               $$$reportNull$$$0(0);
            }
         } catch (IllegalArgumentException var1) {
            throw a(var1);
         }

         return Arrays.stream(values()).filter(new r(var0)).findFirst().get();
      }

      // $VF: Failed to inline enum fields
      // 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!)
      static {
         String[] var5 = new String[23];
         int var3 = 0;
         String var2 = "'2\tj/%);\u0018\u0001W+\n\r\"\b_<w\u0013#;\u0005\t-\"\b_<\u0019</3\f\u001abP\nn\u00169&$\u0005I=\f$$\u000fW\u001b$80\u0018\u0001W+)!9\r\u0015\"`)'5\b\u0015-80/9\u000e\u0015'8r\u001acP\u0003\t23'$\u0001V\u000060'r4C>2\u0015\u00178\u0012_-8:,?\u001a_*w\t;&\u0005\u001a:6:\u001978\t\\!%0\u00103\u0013U;%>'\u001f\u0004_ #4$?\u0005H\u0007&\u00183t/:8\r&?\u0012_-#20/.[#2\u0004,7\r_\n\u000b\u0006@{*3/'%\u0013\r\u00103\u0007S=#803\u0004\u001a\u0007\u0013\t+\u0006!^*%81%\n00\u0003\u0002|e\u0013#;\u0005\u0003\u0017\u0004)>\u0003$\u0007O#236v\u0006U<w\u001d\f9\u0014t;;1b&\u0001H/:863\u0012\u001air.ev\u000f\\nr.ls\u0013\u001a#\".6v\u000eU:w?'v\u000eO\";\u000b:bP\n\u000f3903\u0013I\b\u0006\u00183\u001a\u000060'\u0005\u0007;\u0001S\"\f03\u0007S=#803\u0004s\n";
         int var4 = "'2\tj/%);\u0018\u0001W+\n\r\"\b_<w\u0013#;\u0005\t-\"\b_<\u0019</3\f\u001abP\nn\u00169&$\u0005I=\f$$\u000fW\u001b$80\u0018\u0001W+)!9\r\u0015\"`)'5\b\u0015-80/9\u000e\u0015'8r\u001acP\u0003\t23'$\u0001V\u000060'r4C>2\u0015\u00178\u0012_-8:,?\u001a_*w\t;&\u0005\u001a:6:\u001978\t\\!%0\u00103\u0013U;%>'\u001f\u0004_ #4$?\u0005H\u0007&\u00183t/:8\r&?\u0012_-#20/.[#2\u0004,7\r_\n\u000b\u0006@{*3/'%\u0013\r\u00103\u0007S=#803\u0004\u001a\u0007\u0013\t+\u0006!^*%81%\n00\u0003\u0002|e\u0013#;\u0005\u0003\u0017\u0004)>\u0003$\u0007O#236v\u0006U<w\u001d\f9\u0014t;;1b&\u0001H/:863\u0012\u001air.ev\u000f\\nr.ls\u0013\u001a#\".6v\u000eU:w?'v\u000eO\";\u000b:bP\n\u000f3903\u0013I\b\u0006\u00183\u001a\u000060'\u0005\u0007;\u0001S\"\f03\u0007S=#803\u0004s\n"
            .length();
         char var1 = '\f';
         int var7 = -1;

         label24:
         while (true) {
            byte var10000 = 27;
            String var10001 = var2.substring(++var7, var7 + var1);
            byte var10002 = -1;

            while (true) {
               String var9 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var5[var3++] = var9;
                     if ((var7 += var1) >= var4) {
                        a = var5;
                        String[] var8 = a;
                        otherName = new X509GeneralName.Type(0, var8[1]);
                        rfc822Name = new X509GeneralName.Type(1, var8[19]);
                        dNSName = new X509GeneralName.Type(2, var8[18]);
                        x400Address = new X509GeneralName.Type(3, var8[3]);
                        directoryName = new X509GeneralName.Type(4, var8[22]);
                        ediPartyName = new X509GeneralName.Type(5, var8[21]);
                        uniformResourceIdentifier = new X509GeneralName.Type(6, var8[15]);
                        iPAddress = new X509GeneralName.Type(7, var8[11]);
                        registeredID = new X509GeneralName.Type(8, var8[12]);
                        BY_TAG = new X509GeneralName.Type[]{
                           otherName, rfc822Name, dNSName, x400Address, directoryName, ediPartyName, uniformResourceIdentifier, iPAddress, registeredID
                        };
                        return;
                     }

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

                     var2 = "cvM~zRKRK$\u0010K^\\\u000eb[v;IGVTK$\u0010K^\\";
                     var4 = "cvM~zRKRK$\u0010K^\\\u000eb[v;IGVTK$\u0010K^\\".length();
                     var1 = 14;
                     var7 = -1;
               }

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

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

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

         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 -> 89;
               case 1 -> 77;
               case 2 -> 123;
               case 3 -> 33;
               case 4 -> 85;
               case 5 -> 76;
               default -> 70;
            });
         }

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