package com.l7tech.server.transport.jms2;

import com.l7tech.gateway.common.transport.jms.JmsConnection;
import com.l7tech.server.transport.jms.JmsBag;
import com.l7tech.server.transport.jms.JmsRuntimeException;
import com.l7tech.server.transport.jms.JmsUtil;
import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.NamingException;

public class SingleConnection implements CachedConnection {
   private static final Logger a;
   private final SessionHolder b;
   private final JmsEndpointConfig c;
   private final long d;
   private final JmsResourceManagerConfig e;
   private static final String[] f;

   public SingleConnection(JmsEndpointConfig var1, JmsResourceManagerConfig var2) throws NamingException, JmsRuntimeException {
      this.c = var1;
      this.e = var2;
      this.b = this.newConnection(var1);
      this.d = Long.parseLong(
         var1.getConnection().properties().getProperty(JmsConnection.PROP_CONNECTION_EVICTABLE_TIME, String.valueOf(var2.getMaximumIdleTime()))
      );
   }

   @Override
   public synchronized SessionHolder borrowConnection() throws JmsRuntimeException {
      this.touch();
      this.b.ref();
      return this.b;
   }

   @Override
   public synchronized void returnConnection(SessionHolder var1) throws JmsRuntimeException {
      this.b.unRef();
   }

   @Override
   public JmsEndpointConfig getEndpointConfig() {
      return this.c;
   }

   @Override
   public synchronized void close() {
      this.b.close();
   }

   @Override
   public long getCreatedTime() {
      return this.b.getCreatedTime();
   }

   @Override
   public void touch() {
      this.b.touch();
   }

   @Override
   public AtomicLong getLastAccessTime() {
      return this.b.getLastAccessTime();
   }

   @Override
   public synchronized void invalidate(SessionHolder var1) throws Exception {
      this.b.close();
   }

   @Override
   public boolean isDisconnected() {
      return false;
   }

   @Override
   public boolean isActive() {
      return false;
   }

   @Override
   public boolean isIdleTimeoutExpired() {
      return System.currentTimeMillis() - this.getLastAccessTime().get() > this.d && this.d > 0L;
   }

   @Override
   public void debugStatus() {
      Logger var10000 = a;
      Level var10001 = Level.FINE;
      int var10002 = this.b.refCount();
      String var10003 = this.c.getDisplayName();
      String[] var1 = f;
      var10000.log(var10001, var1[3] + var10002 + var1[2] + var10003);
   }

   @Override
   public String toString() {
      return this.getClass().getSimpleName() + f[0] + this.c.getDisplayName();
   }

   protected SessionHolder newConnection(JmsEndpointConfig var1) throws NamingException, JmsRuntimeException {
      try {
         JmsBag var2 = JmsUtil.connect(var1);
         var2.getConnection().start();
         SessionHolder var3 = SessionHolderFactory.createSessionHolder(var1, var2, this.e);
         var3.ref();
         a.log(Level.FINE, f[1], new Object[]{var3.getName(), var3.getConnectionVersion(), var3.getEndpointVersion()});
         return var3;
      } catch (NamingException var4) {
         throw var4;
      } catch (Throwable var5) {
         throw new JmsRuntimeException(var5);
      }
   }

   static {
      String[] var5 = new String[4];
      int var3 = 0;
      String var2 = " P~1N\u000f)N#\t\t \t1\u0000\u0007!9t\u00031\u0000I'(e\u000b*\u000b\rdr{Z#GEd,e\u0018-\u0007\u0006*z{[#T\u0012v'";
      int var4 = " P~1N\u000f)N#\t\t \t1\u0000\u0007!9t\u00031\u0000I'(e\u000b*\u000b\rdr{Z#GEd,e\u0018-\u0007\u0006*z{[#T\u0012v'".length();
      char var1 = 3;
      int var7 = -1;

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

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

                  var2 = "\u0010(\u000b8<\u0006\u000f^9\u000b-y\bq9\u001a7/\u0011P\u0010";
                  var4 = "\u0010(\u000b8<\u0006\u000f^9\u000b-y\bq9\u001a7/\u0011P\u0010".length();
                  var1 = '\f';
                  var7 = -1;
            }

            var10000 = 73;
            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] ^ 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 -> 121;
            case 1 -> 19;
            case 2 -> 39;
            case 3 -> 23;
            case 4 -> 16;
            case 5 -> 61;
            default -> 35;
         });
      }

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