package com.l7tech.server.transport.ftp;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.ftpserver.ConnectionConfig;
import org.apache.ftpserver.command.CommandFactory;
import org.apache.ftpserver.ftplet.FileSystemFactory;
import org.apache.ftpserver.ftplet.FtpStatistics;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.ftpletcontainer.FtpletContainer;
import org.apache.ftpserver.ftpletcontainer.impl.DefaultFtpletContainer;
import org.apache.ftpserver.impl.DefaultFtpStatistics;
import org.apache.ftpserver.impl.FtpServerContext;
import org.apache.ftpserver.listener.Listener;
import org.apache.ftpserver.message.MessageResource;
import org.apache.ftpserver.message.MessageResourceFactory;
import org.apache.mina.filter.executor.OrderedThreadPoolExecutor;
import org.jetbrains.annotations.NotNull;

public class SsgFtpServerContext implements FtpServerContext {
   private static final Logger a;
   private final CommandFactory b;
   private final ConnectionConfig c;
   private final FtpRequestProcessor d;
   private final UserManager e;
   private final FtpStatistics f;
   private final FtpletContainer g;
   private final FileSystemFactory h;
   private final MessageResource i;
   private final Map<String, Listener> j;
   private ThreadPoolExecutor k;
   private static final String[] l;

   public SsgFtpServerContext(@NotNull CommandFactory var1, @NotNull ConnectionConfig var2, @NotNull FtpRequestProcessor var3, @NotNull UserManager var4) {
      if (var1 == null) {
         a(0);
      }

      if (var2 == null) {
         a(1);
      }

      if (var3 == null) {
         a(2);
      }

      if (var4 == null) {
         a(3);
      }

      super();
      this.f = new DefaultFtpStatistics();
      this.g = new DefaultFtpletContainer();
      this.h = new l();
      this.i = new MessageResourceFactory().createMessageResource();
      this.j = new HashMap<>();
      this.k = null;
      this.b = var1;
      this.c = var2;
      this.d = var3;
      this.e = var4;
   }

   public UserManager getUserManager() {
      return this.e;
   }

   public FileSystemFactory getFileSystemManager() {
      return this.h;
   }

   public MessageResource getMessageResource() {
      return this.i;
   }

   public FtpStatistics getFtpStatistics() {
      return this.f;
   }

   public FtpletContainer getFtpletContainer() {
      return this.g;
   }

   public CommandFactory getCommandFactory() {
      return this.b;
   }

   public FtpRequestProcessor getRequestProcessor() {
      return this.d;
   }

   public void addFtplet(String var1, Ftplet var2) {
      this.g.getFtplets().put(var1, var2);
   }

   public Ftplet getFtplet(String var1) {
      return this.g.getFtplet(var1);
   }

   public void addListener(String var1, Listener var2) {
      this.j.put(var1, var2);
   }

   public Listener getListener(String var1) {
      return this.j.get(var1);
   }

   public Map<String, Listener> getListeners() {
      return this.j;
   }

   public ConnectionConfig getConnectionConfig() {
      return this.c;
   }

   public void dispose() {
      label22: {
         InterruptedException var1;
         try {
            this.j.clear();
            this.g.getFtplets().clear();
            if (this.k == null) {
               break label22;
            }

            this.k.shutdown();

            try {
               this.k.awaitTermination(5000L, TimeUnit.MILLISECONDS);
               break label22;
            } catch (InterruptedException var2) {
               var1 = var2;
            }
         } catch (IllegalArgumentException var3) {
            throw a(var3);
         }

         a.log(Level.FINE, l[0] + var1.getMessage());
      }

      this.d.dispose();
   }

   public synchronized ThreadPoolExecutor getThreadPoolExecutor() {
      try {
         if (this.k == null) {
            this.k = new OrderedThreadPoolExecutor(this.c.getMaxThreads());
         }
      } catch (IllegalArgumentException var1) {
         throw a(var1);
      }

      return this.k;
   }

   static {
      String[] var5 = new String[8];
      int var3 = 0;
      String var2 = "\u001a\u001f\u001b&\u0018\u001e\u001a>\u0018\u0006/Y\tR;\u0003\r,\u000e\u0014\u001a'\u0019\u001d&\u000b\bO>\u0003\f'CZ3-\u0018\u0004l\u0015MN+\u0014\u0001l\n\u001fH8\u0012\u001bl\r\b[ \u0004\u0019,\u000b\u000e\u0015(\u0003\u0019l*\t]\b\u0003\u0019\u0010\u001c\bL+\u0005*,\u0017\u000e_6\u0003\u0006r\u001e\u0007*\rD\u0010-\u0018\u0007-\u001c\u0019N'\u0018\u0007\u0000\u0016\u0014\\'\u0010>\u000f\u0005\u000e6\u0014\u001fT:W\u000f,\u000bZz\u0000\u0018\u001d\r\f\u0016Vn\u0007\b1\u0018\u0017_:\u0012\u001bc^_IiW\u0006%Y_I`R\u001ac\u0014\u000fI:W\u0007,\rZX+W\u00076\u0015\u0016\u000e-\u0018\u0004.\u0018\u0014^\b\u0016\n7\u0016\bC";
      int var4 = "\u001a\u001f\u001b&\u0018\u001e\u001a>\u0018\u0006/Y\tR;\u0003\r,\u000e\u0014\u001a'\u0019\u001d&\u000b\bO>\u0003\f'CZ3-\u0018\u0004l\u0015MN+\u0014\u0001l\n\u001fH8\u0012\u001bl\r\b[ \u0004\u0019,\u000b\u000e\u0015(\u0003\u0019l*\t]\b\u0003\u0019\u0010\u001c\bL+\u0005*,\u0017\u000e_6\u0003\u0006r\u001e\u0007*\rD\u0010-\u0018\u0007-\u001c\u0019N'\u0018\u0007\u0000\u0016\u0014\\'\u0010>\u000f\u0005\u000e6\u0014\u001fT:W\u000f,\u000bZz\u0000\u0018\u001d\r\f\u0016Vn\u0007\b1\u0018\u0017_:\u0012\u001bc^_IiW\u0006%Y_I`R\u001ac\u0014\u000fI:W\u0007,\rZX+W\u00076\u0015\u0016\u000e-\u0018\u0004.\u0018\u0014^\b\u0016\n7\u0016\bC"
         .length();
      char var1 = '"';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 48;
         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) {
                     l = var5;
                     a = Logger.getLogger(FtpServerContext.class.getName());
                     return;
                  }

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

                  var2 = "b]UhmB\rvIUh\u0010eKAoEP\u0017G\\_yEP\u0010x\\";
                  var4 = "b]UhmB\rvIUh\u0010eKAoEP\u0017G\\_yEP\u0010x\\".length();
                  var1 = 11;
                  var7 = -1;
            }

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

      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 -> 126;
            case 1 -> 71;
            case 2 -> 89;
            case 3 -> 115;
            case 4 -> 73;
            case 5 -> 74;
            default -> 10;
         });
      }

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