package com.l7tech.server.transport.ftp;

import java.io.IOException;
import org.apache.ftpserver.command.AbstractCommand;
import org.apache.ftpserver.ftplet.DefaultFtpReply;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpRequest;
import org.apache.ftpserver.impl.FtpIoSession;
import org.apache.ftpserver.impl.FtpServerContext;

public class FtpCommands {
   public static class FEAT extends AbstractCommand {
      private final String a;
      private static final String[] b;

      public FEAT(String[] var1) {
         this.a = this.a(var1);
      }

      public void execute(FtpIoSession var1, FtpServerContext var2, FtpRequest var3) throws IOException, FtpException {
         var1.resetState();
         var1.write(new DefaultFtpReply(211, this.a));
      }

      private String a(String[] var1) {
         StringBuilder var2 = new StringBuilder();
         String[] var7 = b;
         var2.append(var7[1]);

         for (String var6 : var1) {
            var7 = b;
            var2.append(var7[2]);
            var2.append(var6);
         }

         var2.append(b[0]);
         return var2.toString();
      }

      static {
         String[] var5 = new String[3];
         int var3 = 0;
         String var2 = "G\u0005/9\u00074P):\u0014\u0019\u007f\u0006/%b\tJ(YmaH\u001fMmDkxW\u001eL9Rz2\u0002G\u0017";
         int var4 = "G\u0005/9\u00074P):\u0014\u0019\u007f\u0006/%b\tJ(YmaH\u001fMmDkxW\u001eL9Rz2\u0002G\u0017".length();
         char var1 = '\n';
         int var0 = -1;

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

         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 -> 34;
               case 1 -> 88;
               case 2 -> 113;
               case 3 -> 103;
               case 4 -> 72;
               case 5 -> 30;
               default -> 81;
            });
         }

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

   public static class LANG extends AbstractCommand {
      private static final String a;
      private static final String[] b;

      public void execute(FtpIoSession param1, FtpServerContext param2, FtpRequest param3) throws IOException, FtpException {
         // $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 1
         // 01: invokevirtual org/apache/ftpserver/impl/FtpIoSession.resetState ()V
         // 04: aload 3
         // 05: invokeinterface org/apache/ftpserver/ftplet/FtpRequest.getArgument ()Ljava/lang/String; 1
         // 0a: astore 4
         // 0c: aload 4
         // 0e: ifnull 28
         // 11: aload 4
         // 13: invokevirtual java/lang/String.toLowerCase ()Ljava/lang/String;
         // 16: getstatic com/l7tech/server/transport/ftp/FtpCommands$LANG.b [Ljava/lang/String;
         // 19: bipush 2
         // 1a: aaload
         // 1b: invokevirtual java/lang/String.startsWith (Ljava/lang/String;)Z
         // 1e: ifeq 48
         // 21: goto 28
         // 24: invokestatic com/l7tech/server/transport/ftp/FtpCommands$LANG.a (Ljava/io/IOException;)Ljava/io/IOException;
         // 27: athrow
         // 28: aload 1
         // 29: aconst_null
         // 2a: invokevirtual org/apache/ftpserver/impl/FtpIoSession.setLanguage (Ljava/lang/String;)V
         // 2d: aload 1
         // 2e: new org/apache/ftpserver/ftplet/DefaultFtpReply
         // 31: dup
         // 32: sipush 200
         // 35: getstatic com/l7tech/server/transport/ftp/FtpCommands$LANG.b [Ljava/lang/String;
         // 38: bipush 3
         // 39: aaload
         // 3a: invokespecial org/apache/ftpserver/ftplet/DefaultFtpReply.<init> (ILjava/lang/String;)V
         // 3d: invokevirtual org/apache/ftpserver/impl/FtpIoSession.write (Ljava/lang/Object;)Lorg/apache/mina/core/future/WriteFuture;
         // 40: pop
         // 41: goto 5c
         // 44: invokestatic com/l7tech/server/transport/ftp/FtpCommands$LANG.a (Ljava/io/IOException;)Ljava/io/IOException;
         // 47: athrow
         // 48: aload 1
         // 49: new org/apache/ftpserver/ftplet/DefaultFtpReply
         // 4c: dup
         // 4d: sipush 504
         // 50: getstatic com/l7tech/server/transport/ftp/FtpCommands$LANG.b [Ljava/lang/String;
         // 53: bipush 1
         // 54: aaload
         // 55: invokespecial org/apache/ftpserver/ftplet/DefaultFtpReply.<init> (ILjava/lang/String;)V
         // 58: invokevirtual org/apache/ftpserver/impl/FtpIoSession.write (Ljava/lang/Object;)Lorg/apache/mina/core/future/WriteFuture;
         // 5b: pop
         // 5c: return
         // try (5 -> 14): 15 java/io/IOException
         // try (7 -> 31): 31 java/io/IOException
      }

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

      static {
         String[] var5 = new String[4];
         int var3 = 0;
         String var2 = ",x0\ny\u000e!\u0002P^iZ\"\u0002$\u001eT&bC%\u000eNV,{\u0006\"\u0017[^ip\f>CJR eC<\u0002L[$s\u0017)\u0011\u0010";
         int var4 = ",x0\ny\u000e!\u0002P^iZ\"\u0002$\u001eT&bC%\u000eNV,{\u0006\"\u0017[^ip\f>CJR eC<\u0002L[$s\u0017)\u0011\u0010".length();
         char var1 = 2;
         int var7 = -1;

         label24:
         while (true) {
            byte var10000 = 24;
            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) {
                        b = var5;
                        a = b[0];
                        return;
                     }

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

                     var2 = "]\t\u0012{\b\u007fPs!/\u0018+SsUo$S\u0006k\u0013";
                     var4 = "]\t\u0012{\b\u007fPs!/\u0018+SsUo$S\u0006k\u0013".length();
                     var1 = 2;
                     var7 = -1;
               }

               var10000 = 105;
               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] ^ 34);
         }

         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 -> 81;
               case 1 -> 14;
               case 2 -> 123;
               case 3 -> 84;
               case 4 -> 123;
               case 5 -> 38;
               default -> 34;
            });
         }

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