package com.l7tech.server.jdbc;

import com.l7tech.gateway.common.AsyncAdminMethods.JobId;
import com.l7tech.gateway.common.jdbc.JdbcAdmin;
import com.l7tech.gateway.common.jdbc.JdbcConnection;
import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.UpdateException;
import com.l7tech.server.admin.AsyncAdminMethodsImpl;
import com.l7tech.server.event.AdminInfo;
import com.l7tech.util.Background;
import com.l7tech.util.Config;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.concurrent.FutureTask;
import org.jetbrains.annotations.Nullable;

public class JdbcAdminImpl extends AsyncAdminMethodsImpl implements JdbcAdmin {
   private JdbcConnectionManager e;
   private JdbcQueryingManager f;
   private JdbcConnectionPoolManager g;
   private Config h;
   private static final String[] i;

   public JdbcAdminImpl(JdbcConnectionManager var1, JdbcQueryingManager var2, JdbcConnectionPoolManager var3, Config var4) {
      this.e = var1;
      this.f = var2;
      this.g = var3;
      this.h = var4;
   }

   public JdbcConnection getJdbcConnection(String var1) throws FindException {
      return this.e.getJdbcConnection(var1);
   }

   public List<JdbcConnection> getAllJdbcConnections() throws FindException {
      ArrayList var1 = new ArrayList();
      var1.addAll(this.e.findAll());
      return var1;
   }

   public List<String> getAllJdbcConnectionNames() throws FindException {
      List var1 = this.getAllJdbcConnections();
      ArrayList var2 = new ArrayList(var1.size());

      for (JdbcConnection var4 : var1) {
         var2.add(var4.getName());
      }

      return var2;
   }

   public Goid saveJdbcConnection(JdbcConnection var1) throws UpdateException {
      this.e.update(var1);
      return var1.getGoid();
   }

   public void deleteJdbcConnection(JdbcConnection var1) throws DeleteException {
      this.e.delete(var1);
   }

   public JobId<String> testJdbcConnection(JdbcConnection var1) {
      Map var2 = var1.getAdditionalProperties();
      String[] var4 = i;
      if (var2.get(var4[3]) == null) {
         var2.put(var4[2], "1");
      }

      var1.setAdditionalProperties(var2);
      FutureTask var3 = new FutureTask<>(AdminInfo.find(false).wrapCallable(new g(this, var1)));
      Background.scheduleOneShot(new s(this, var3), 0L);
      return this.registerJob(var3, String.class);
   }

   private boolean a(@Nullable JdbcConnection var1) {
      if (var1 != null) {
         Map var10000 = var1.getAdditionalProperties();
         String[] var3 = i;
         String var2 = (String)var10000.get(var3[0]);
         return var3[7].equals(var2);
      } else {
         return false;
      }
   }

   public JobId<String> testJdbcQuery(String var1, String var2, @Nullable String var3, int var4) {
      FutureTask var5 = new FutureTask<>(AdminInfo.find(false).wrapCallable(new h(this, var1, var2, var3, var4)));
      Background.scheduleOneShot(new t(this, var5), 0L);
      return this.registerJob(var5, String.class);
   }

   public String testJdbcQueryForAPI(String var1, String var2, @Nullable String var3, int var4) {
      Object var5 = this.f.performJdbcQuery(var1, var2, var3, 1, var4, new ArrayList<>());
      return var5 instanceof String ? (String)var5 : null;
   }

   public List<String> getPropertyDefaultDriverClassList() {
      ArrayList var1 = new ArrayList();
      String[] var5 = i;
      String var2 = this.h.getProperty(var5[4]);
      if (var2 != null && !var2.isEmpty()) {
         StringTokenizer var3 = new StringTokenizer(var2, "\n");

         while (var3.hasMoreTokens()) {
            String var4 = var3.nextToken();
            if (var4 != null && !var4.isEmpty()) {
               var1.add(var4);
            }
         }
      }

      if (var1.isEmpty()) {
         var1.add(i[8]);
      }

      return var1;
   }

   public List<String> getPropertySupportedDriverClass() {
      return this.e.getSupportedDriverClass();
   }

   public int getPropertyDefaultMaxRecords() {
      return this.h.getIntProperty(i[6], 10);
   }

   public int getPropertyDefaultMinPoolSize() {
      return this.h.getIntProperty(i[5], 3);
   }

   public int getPropertyDefaultMaxPoolSize() {
      return this.h.getIntProperty(i[1], 15);
   }

   public boolean isDriverClassSupported(String var1) {
      return this.e.isDriverClassSupported(var1);
   }

   static {
      String[] var5 = new String[9];
      int var3 = 0;
      String var2 = "]YO_CEqUOZCODkoOSRKN/VHYTeDkRIXCODk\u0012\\TXJBk[\u0002VV^{jS@h^\\N+XI]VSGqjMWBC\u0019_\u001fK\u0007\bJfMYRECy`H^BvR_`Q\\OD\u0019_\u001fK\u0007\bJfMYRECy`H^BvR_`Q\\OD&VHYTeDkRIXCODk\u0012HI^PNw\u007f@ZDU\u0005aYJZBJ_IU_O/VHYTeDkRIXCODk\u0012\\TXJBk[\u0002V^H{jS@h^\\N+XI]VSGqjMWBC!VHYTw^`NU\u0015ZGSWYOTEBX+XI]VSGqjMWBC";
      int var4 = "]YO_CEqUOZCODkoOSRKN/VHYTeDkRIXCODk\u0012\\TXJBk[\u0002VV^{jS@h^\\N+XI]VSGqjMWBC\u0019_\u001fK\u0007\bJfMYRECy`H^BvR_`Q\\OD\u0019_\u001fK\u0007\bJfMYRECy`H^BvR_`Q\\OD&VHYTeDkRIXCODk\u0012HI^PNw\u007f@ZDU\u0005aYJZBJ_IU_O/VHYTeDkRIXCODk\u0012\\TXJBk[\u0002V^H{jS@h^\\N+XI]VSGqjMWBC!VHYTw^`NU\u0015ZGSWYOTEBX+XI]VSGqjMWBC"
         .length();
      char var1 = 20;
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     i = var5;
                     return;
                  }

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

                  var2 = "tOOToLu\\KKZW\u0018]AT\u001bIPtOB\u0017VN\u0007mZLZ\u001b`[nHKK";
                  var4 = "tOOToLu\\KKZW\u0018]AT\u001bIPtOB\u0017VN\u0007mZLZ\u001b`[nHKK".length();
                  var1 = '\f';
                  var7 = -1;
            }

            var10000 = 24;
            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] ^ 31);
      }

      return var10000;
   }

   private static String b(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 -> 38;
            case 1 -> 54;
            case 2 -> 33;
            case 3 -> 45;
            case 4 -> 60;
            case 5 -> 49;
            default -> 31;
         });
      }

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