package com.l7tech.server;

import com.l7tech.common.io.CertUtils;
import com.l7tech.gateway.common.audit.AuditSearchCriteria.Builder;
import com.l7tech.objectmodel.FindException;
import com.l7tech.server.audit.AuditRecordManager;
import com.l7tech.server.boot.ShutdownWatcher;
import com.l7tech.server.cluster.DatabaseReplicationMonitor;
import com.l7tech.server.management.NodeStateType;
import com.l7tech.server.management.api.monitoring.BuiltinMonitorables;
import com.l7tech.server.management.api.monitoring.NodeStatus;
import com.l7tech.server.management.api.node.NodeApi;
import com.l7tech.server.management.api.node.NodeApi.UnsupportedPropertyException;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.IOUtils;
import jakarta.annotation.Resource;
import jakarta.inject.Inject;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.xml.ws.WebServiceContext;
import java.io.File;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

public class NodeApiImpl implements NodeApi {
   private static final Logger a;
   @Inject
   private ShutdownWatcher shutdowner;
   @Inject
   private AuditRecordManager auditRecordManager;
   @Inject
   private DatabaseReplicationMonitor databaseReplicationMonitor;
   @Resource
   private WebServiceContext wscontext;
   private X509Certificate b;
   private static final String[] c;

   public void shutdown() {
      this.a();
      a.warning(c[15]);
      this.shutdowner.shutdownNow();
   }

   public void ping() {
      this.a();
      a.fine(c[11]);
   }

   public NodeStatus getNodeStatus() {
      this.a();
      a.fine(c[17]);
      return new NodeStatus(NodeStateType.RUNNING, new Date(), new Date());
   }

   public String getProperty(String var1) throws UnsupportedPropertyException, FindException {
      try {
         this.a();
         a.fine(c[6]);
         if (var1.equals(BuiltinMonitorables.AUDIT_SIZE.getName())) {
            return Integer.toString(this.auditRecordManager.findCount(new Builder().fromLevel(Level.ALL).toLevel(Level.OFF).build()));
         }
      } catch (UnsupportedPropertyException var2) {
         throw a(var2);
      }

      try {
         if (var1.equals(BuiltinMonitorables.DATABASE_REPLICATION_DELAY.getName())) {
            return Long.toString(this.databaseReplicationMonitor.getReplicationDelay());
         }
      } catch (UnsupportedPropertyException var3) {
         throw a(var3);
      }

      throw new UnsupportedPropertyException(c[3]);
   }

   private void a() {
      // $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 0
      // 01: getfield com/l7tech/server/NodeApiImpl.wscontext Ljakarta/xml/ws/WebServiceContext;
      // 04: invokeinterface jakarta/xml/ws/WebServiceContext.getMessageContext ()Ljakarta/xml/ws/handler/MessageContext; 1
      // 09: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // 0c: astore 4
      // 0e: aload 4
      // 10: bipush 0
      // 11: aaload
      // 12: invokeinterface jakarta/xml/ws/handler/MessageContext.get (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 17: checkcast jakarta/servlet/http/HttpServletRequest
      // 1a: astore 1
      // 1b: aload 1
      // 1c: ifnonnull 2f
      // 1f: new java/lang/IllegalStateException
      // 22: dup
      // 23: aload 4
      // 25: bipush 2
      // 26: aaload
      // 27: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // 2a: athrow
      // 2b: invokestatic com/l7tech/server/NodeApiImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2e: athrow
      // 2f: aload 1
      // 30: getstatic com/l7tech/gateway/common/transport/SsgConnector$Endpoint.PC_NODE_API Lcom/l7tech/gateway/common/transport/SsgConnector$Endpoint;
      // 33: invokestatic com/l7tech/server/transport/http/HttpTransportModule.requireEndpoint (Ljakarta/servlet/ServletRequest;Lcom/l7tech/gateway/common/transport/SsgConnector$Endpoint;)V
      // 36: aload 0
      // 37: aload 1
      // 38: invokevirtual com/l7tech/server/NodeApiImpl.a (Ljakarta/servlet/http/HttpServletRequest;)Ljava/security/cert/X509Certificate;
      // 3b: astore 2
      // 3c: aload 2
      // 3d: ifnonnull 5e
      // 40: getstatic com/l7tech/server/NodeApiImpl.a Ljava/util/logging/Logger;
      // 43: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // 46: bipush 13
      // 48: aaload
      // 49: invokevirtual java/util/logging/Logger.fine (Ljava/lang/String;)V
      // 4c: new java/lang/IllegalStateException
      // 4f: dup
      // 50: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // 53: bipush 7
      // 55: aaload
      // 56: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // 59: athrow
      // 5a: invokestatic com/l7tech/server/NodeApiImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 5d: athrow
      // 5e: aload 1
      // 5f: invokeinterface jakarta/servlet/http/HttpServletRequest.getRemoteAddr ()Ljava/lang/String; 1
      // 64: invokestatic java/net/InetAddress.getByName (Ljava/lang/String;)Ljava/net/InetAddress;
      // 67: invokevirtual java/net/InetAddress.isLoopbackAddress ()Z
      // 6a: ifne 7f
      // 6d: new java/lang/IllegalStateException
      // 70: dup
      // 71: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // 74: bipush 9
      // 76: aaload
      // 77: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // 7a: athrow
      // 7b: invokestatic com/l7tech/server/NodeApiImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 7e: athrow
      // 7f: aload 0
      // 80: invokevirtual com/l7tech/server/NodeApiImpl.b ()Ljava/security/cert/X509Certificate;
      // 83: astore 3
      // 84: aload 3
      // 85: ifnull a8
      // 88: aload 3
      // 89: aload 2
      // 8a: invokestatic com/l7tech/common/io/CertUtils.certsAreEqual (Ljava/security/cert/X509Certificate;Ljava/security/cert/X509Certificate;)Z
      // 8d: ifne a8
      // 90: goto 97
      // 93: invokestatic com/l7tech/server/NodeApiImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 96: athrow
      // 97: new java/lang/IllegalStateException
      // 9a: dup
      // 9b: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // 9e: bipush 1
      // 9f: aaload
      // a0: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // a3: athrow
      // a4: invokestatic com/l7tech/server/NodeApiImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // a7: athrow
      // a8: goto f5
      // ab: astore 2
      // ac: new java/lang/IllegalStateException
      // af: dup
      // b0: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // b3: astore 4
      // b5: aload 4
      // b7: bipush 16
      // b9: aaload
      // ba: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // bd: athrow
      // be: astore 2
      // bf: new java/lang/IllegalStateException
      // c2: dup
      // c3: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // c6: astore 4
      // c8: aload 4
      // ca: bipush 12
      // cc: aaload
      // cd: aload 2
      // ce: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // d1: athrow
      // d2: astore 2
      // d3: new java/lang/IllegalStateException
      // d6: dup
      // d7: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // da: astore 4
      // dc: aload 4
      // de: bipush 10
      // e0: aaload
      // e1: aload 2
      // e2: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // e5: athrow
      // e6: astore 2
      // e7: new java/lang/IllegalStateException
      // ea: dup
      // eb: getstatic com/l7tech/server/NodeApiImpl.c [Ljava/lang/String;
      // ee: bipush 5
      // ef: aaload
      // f0: aload 2
      // f1: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // f4: athrow
      // f5: return
      // try (64 -> 78): 78 com/l7tech/server/transport/ListenerException
      // try (62 -> 68): 69 com/l7tech/server/transport/ListenerException
      // try (45 -> 57): 57 com/l7tech/server/transport/ListenerException
      // try (29 -> 43): 43 com/l7tech/server/transport/ListenerException
      // try (11 -> 20): 20 com/l7tech/server/transport/ListenerException
      // try (22 -> 80): 81 com/l7tech/server/transport/ListenerException
      // try (22 -> 80): 91 java/net/UnknownHostException
      // try (22 -> 80): 102 java/security/cert/CertificateException
      // try (22 -> 80): 113 java/io/IOException
   }

   private X509Certificate a(HttpServletRequest var1) {
      String[] var5 = c;
      Object var2 = var1.getAttribute(var5[14]);
      if (!(var2 instanceof X509Certificate var3)) {
         if (var2 instanceof X509Certificate[] var4) {
            X509Certificate var10000;
            label25: {
               try {
                  if (var4.length > 0) {
                     var10000 = var4[0];
                     break label25;
                  }
               } catch (IllegalStateException var6) {
                  throw a(var6);
               }

               var10000 = null;
            }

            var3 = var10000;
         } else if (var2 != null) {
            Logger var8 = a;
            String var10001 = var2.getClass().getName();
            var5 = c;
            var8.warning(var5[18] + var10001 + var5[8]);
            var3 = null;
         } else {
            var3 = null;
         }
      }

      return var3;
   }

   private X509Certificate b() throws CertificateException, IOException {
      X509Certificate var1 = this.b;
      if (var1 == null) {
         String var2 = ConfigFactory.getProperty(c[4]);
         if (var2 != null) {
            var1 = CertUtils.decodeCert(IOUtils.slurpFile(new File(var2)));
            this.b = var1;
         }
      }

      return var1;
   }

   static {
      String[] var5 = new String[19];
      int var3 = 0;
      String var2 = "O+V=\u0002(\u0019\u000b2P0^+\u000b\u000b9X.\u00060\u001dQdO9\u0001)\u001dV>&w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005b^9\u0002(\u0011C#^=\u00049XH#N1\u0011(\u001bMc\u00134w/L)\u0015/\f\u00058X?\u00155\u000e@.\u001d3\u0005(\u000bL.X|\u001f:X@2M9\u0013(\u001dAjN9\u0002*\u0014@>\u001d?\u001f2\f@2I\nU8R,\u0015.\f\\\u0003Y'F%Pr\u001ck\f@)Ur\u00039\nS/Or\u0000.\u0017F/N/33\u0016Q8R0\u001c9\nf/O(.w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005bX.\u00023\n\u0005:O3\u00139\u000bV#S;P?\u001dW>T:\u0019?\u0019Q/\u0014r\u000bB/I\f\u00023\b@8I% w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005bS3P?\u001dW>T:\u0019?\u0019Q/\u0014r\u0018\tjS3\u0004|\u0019Kjei@e;@8I5\u00165\u001bD>X%w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005,R.P2\u0017KgQ3\u0013=\u0014\u0005+Y8\u00029\u000bVd.w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005bX.\u00023\n\u0005:O3\u00139\u000bV#S;P?\u001dW>T:\u0019?\u0019Q/\u0014r\u0004U#S;%w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005,R.P2\u0017KgQ3\u0013=\u0014\u0005+Y8\u00029\u000bVd&f&T9\u001e(XF/O(\u0019:\u0011F+I9P1\u0011V9T2\u0017|\u0011KjO9\u0001)\u001dV>\u0013'O+V=\u0002(\u0019\u000b9X.\u00060\u001dQdO9\u0001)\u001dV>\u0013\u0004ElAf/O(\u0019:\u0011F+I9\u0017k%Y9P\u000f\u0010P>Y3\u00072XW/L)\u0015/\f@.Cq\"T/P2\u0017A/\u001d4\u0011/XK%I|\u00129\u001dKj^3\u001e:\u0011B?O9\u0014|\u001eJ8\u001d)\u00039XG3\u001d(\u00189Xu8R?\u0015/\u000b\u0005\tR2\u0004.\u0017I&X.";
      int var4 = "O+V=\u0002(\u0019\u000b2P0^+\u000b\u000b9X.\u00060\u001dQdO9\u0001)\u001dV>&w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005b^9\u0002(\u0011C#^=\u00049XH#N1\u0011(\u001bMc\u00134w/L)\u0015/\f\u00058X?\u00155\u000e@.\u001d3\u0005(\u000bL.X|\u001f:X@2M9\u0013(\u001dAjN9\u0002*\u0014@>\u001d?\u001f2\f@2I\nU8R,\u0015.\f\\\u0003Y'F%Pr\u001ck\f@)Ur\u00039\nS/Or\u0000.\u0017F/N/33\u0016Q8R0\u001c9\nf/O(.w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005bX.\u00023\n\u0005:O3\u00139\u000bV#S;P?\u001dW>T:\u0019?\u0019Q/\u0014r\u000bB/I\f\u00023\b@8I% w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005bS3P?\u001dW>T:\u0019?\u0019Q/\u0014r\u0018\tjS3\u0004|\u0019Kjei@e;@8I5\u00165\u001bD>X%w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005,R.P2\u0017KgQ3\u0013=\u0014\u0005+Y8\u00029\u000bVd.w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005bX.\u00023\n\u0005:O3\u00139\u000bV#S;P?\u001dW>T:\u0019?\u0019Q/\u0014r\u0004U#S;%w/L)\u0015/\f\u0005.X2\u00199\u001c\u0005,R.P2\u0017KgQ3\u0013=\u0014\u0005+Y8\u00029\u000bVd&f&T9\u001e(XF/O(\u0019:\u0011F+I9P1\u0011V9T2\u0017|\u0011KjO9\u0001)\u001dV>\u0013'O+V=\u0002(\u0019\u000b9X.\u00060\u001dQdO9\u0001)\u001dV>\u0013\u0004ElAf/O(\u0019:\u0011F+I9\u0017k%Y9P\u000f\u0010P>Y3\u00072XW/L)\u0015/\f@.Cq\"T/P2\u0017A/\u001d4\u0011/XK%I|\u00129\u001dKj^3\u001e:\u0011B?O9\u0014|\u001eJ8\u001d)\u00039XG3\u001d(\u00189Xu8R?\u0015/\u000b\u0005\tR2\u0004.\u0017I&X."
         .length();
      char var1 = 30;
      int var7 = -1;

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

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

                  var2 = "]0V\r\u0000'\u0002i!C7\u001a0\u0019y9K&\u00017GY0P7\u0006%\u000eY4V&O4\u0006IuCc";
                  var4 = "]0V\r\u0000'\u0002i!C7\u001a0\u0019y9K&\u00017GY0P7\u0006%\u000eY4V&O4\u0006IuCc".length();
                  var1 = '\r';
                  var7 = -1;
            }

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

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

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

      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 -> 36;
            case 1 -> 75;
            case 2 -> 60;
            case 3 -> 93;
            case 4 -> 113;
            case 5 -> 93;
            default -> 121;
         });
      }

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