package com.l7tech.external.assertions.gatewaygraphql.server.resolver.helper;

import com.l7tech.external.assertions.gatewaygraphql.server.data.ClusterNodeInfoDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.LicenseInfoDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.util.Util;
import com.l7tech.gateway.common.licensing.FeatureLicense;
import com.l7tech.gateway.common.licensing.LicenseDocument;
import com.l7tech.server.NodePropertiesLoaderImpl;
import com.l7tech.server.SystemProperties;
import com.l7tech.server.TelemetryPropertiesLoaderImpl;
import com.l7tech.server.licensing.LicenseDocumentManager;
import com.l7tech.server.licensing.UpdatableCompositeLicenseManager;
import com.l7tech.util.BuildInfo;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.DateUtils;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.SyspropUtil;
import java.io.File;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class LocalClusterNodeInfoHelper implements ClusterNodeInfoHelper {
   private static final Logger a;
   private final LicenseDocumentManager b;
   private final UpdatableCompositeLicenseManager c;
   private final SystemProperties d;
   private final ClusterNodeInfoClient e;
   private final boolean f;
   private static final String[] g;

   public LocalClusterNodeInfoHelper(LicenseDocumentManager var1, UpdatableCompositeLicenseManager var2, SystemProperties var3, ClusterNodeInfoClient var4) {
      this.b = var1;
      this.c = var2;
      this.d = var3;
      this.e = var4;
      this.f = Util.isNodeInfoExtendedDetailsEnabled();
   }

   @Override
   public ClusterNodeInfoHelper.OSInfo getOSInfo() {
      ClusterNodeInfoHelper.OSInfo var1 = new ClusterNodeInfoHelper.OSInfo();
      String[] var2 = g;
      var1.setName(SyspropUtil.getProperty(var2[19]));
      var1.setVersion(SyspropUtil.getProperty(var2[0]));
      var1.setArchitecture(SyspropUtil.getProperty(var2[10]));
      return var1;
   }

   @Override
   public ClusterNodeInfoHelper.JVMInfo getJVMInfo() {
      ClusterNodeInfoHelper.JVMInfo var1 = new ClusterNodeInfoHelper.JVMInfo();
      String[] var2 = g;
      var1.setName(SyspropUtil.getProperty(var2[13]));
      var1.setVersion(SyspropUtil.getProperty(var2[9]));
      var1.setVendor(SyspropUtil.getProperty(var2[20]));
      return var1;
   }

   @Override
   public ClusterNodeInfoHelper.ProductVersion getProductVersion() {
      ClusterNodeInfoHelper.ProductVersion var1 = new ClusterNodeInfoHelper.ProductVersion();
      var1.setMajor(BuildInfo.getProductVersionMajor());
      var1.setMinor(BuildInfo.getProductVersionMinor());
      var1.setSubMinor(BuildInfo.getProductVersionSubMinor());
      var1.setBuildNumber(BuildInfo.getBuildNumber());
      var1.setBuildDate(Util.getDateTimeFromString(BuildInfo.getBuildDate() + BuildInfo.getBuildTime(), g[4], DateUtils.ISO8601_PATTERN));
      var1.setFormalString(BuildInfo.getFormalProductVersion());
      var1.setLongString(BuildInfo.getLongBuildString());
      var1.setShortString(BuildInfo.getBuildString());
      return var1;
   }

   @Override
   public Properties getJVMArguments() {
      if (!this.f) {
         return new Properties();
      }

      List var1 = ManagementFactory.getRuntimeMXBean().getInputArguments();
      Properties var2 = new Properties();

      for (String var4 : var1) {
         String[] var5 = var4.split("=", 2);
         if (var5.length == 2) {
            var2.put(var5[0], var5[1]);
         }
      }

      return var2;
   }

   @Override
   public String getProductName() {
      return BuildInfo.getProductName();
   }

   @Override
   public List<FeatureLicense> getLicenses() {
      ArrayList var1 = new ArrayList();

      try {
         for (LicenseDocument var3 : this.b.findAll()) {
            var1.add(this.c.createFeatureLicense(var3));
         }
      } catch (Exception var4) {
         a.log(Level.INFO, g[16], ExceptionUtils.getMessageWithCause(var4));
      }

      return var1;
   }

   @Override
   public List<LicenseInfoDTO> getLicenseDetails() {
      return this.getLicenses().stream().map(LicenseInfoDTO::new).toList();
   }

   @Override
   public List<ClusterNodeInfoHelper.PatchInfo> getPatches() {
      return Optional.ofNullable(this.e.getPatchesInfo()).orElse(Collections.emptyList()).stream().filter(Objects::nonNull).map(var0 -> {
         ClusterNodeInfoHelper.PatchInfo var1 = new ClusterNodeInfoHelper.PatchInfo();
         String[] var3 = g;
         var1.setPatchId(Util.safeGet(var0, var3[12]));
         var1.setDescription(Util.safeGet(var0, var3[6]));
         var1.setStatus(Util.safeGet(var0, var3[2]));
         var1.setPatchType(Util.safeGet(var0, var3[8]));
         var1.setVersion(Util.safeGet(var0, var3[14]));
         String var2 = Util.safeGet(var0, var3[7]);
         var1.setLatest(var3[17].equalsIgnoreCase(var2));
         return var1;
      }).toList();
   }

   @Override
   public Properties getSystemProperties() {
      try {
         if (!this.f) {
            return new Properties();
         }
      } catch (IOException var3) {
         throw a(var3);
      }

      try {
         return this.d.getUserDefinedProperties();
      } catch (IOException var2) {
         return new Properties();
      }
   }

   @Override
   public Properties getTelemetryProperties() {
      return !this.f ? new Properties() : TelemetryPropertiesLoaderImpl.getInstance().getProperties();
   }

   @Override
   public Properties getNodeProperties() {
      return !this.f ? new Properties() : NodePropertiesLoaderImpl.getInstance().getProperties();
   }

   @Override
   public ClusterNodeInfoDTO.FormFactor getFormFactor() {
      String[] var1 = g;
      if (Util.isDirectoryExists(var1[3])) {
         return ClusterNodeInfoDTO.FormFactor.CONTAINER;
      } else {
         return Util.isDirectoryExists(ConfigFactory.getProperty(g[15])) ? ClusterNodeInfoDTO.FormFactor.APPLIANCE : ClusterNodeInfoDTO.FormFactor.SOFTWARE;
      }
   }

   @Override
   public boolean isSupportsDBUpgrade() {
      String[] var2 = g;
      File var1 = new File(ConfigFactory.getProperty(var2[18]), var2[11]);
      return Util.isSupportsDBUpgrade(var1);
   }

   @Override
   public boolean isFailoverDBConfigured() {
      String[] var2 = g;
      File var1 = new File(ConfigFactory.getProperty(var2[1]), var2[5]);
      return Util.isFailoverDBConfigured(var1);
   }

   static {
      String[] var5 = new String[21];
      int var3 = 0;
      String var2 = "]vt\u0010Qq\u0004[j4\u000fQj4\u0000]d3[w?\u0005@l\u0005K\u0006Aq;\u0012Ap\u0010\u001dj*\u0012\u001bg\u0018Qn?\u0014\u001bq\u0014\u001ca\u000eK|#\u001fyN\u0013VM\u0012\u000bYp\u0004\u000f\\j>\u0003\u001as\u0005]u?\u0014@j\u0012A\u000bV`)\u0005Fj\u0007Fl5\b\u0006^d.\u0003Gw\tBd.\u0005\\W\u000eB`\u000fXd,\u0007\u001au\u001a\u001cs?\u0014Gj\u0018\\\u0007]vt\u0007F`\u001f\u0013\\j>\u0003\u0019f\u000fF+*\u0014[s\u0012@q3\u0003G\u0007Bd.\u0005\\J\u0013\fXd,\u0007\u001au\u001a\u001ck;\u000bQ\u0007D`(\u0015]l\u0019\fAv='Ds\u001b[d4\u0005Q/ww(\tF#\u0005Wq(\u000fQu\u001e\\bz\n]`\u0012\\v?F]m\u0011]w7\u0007@j\u0018\\)z\u0005Uv\u0004W8!VI\u0004Fw/\u0003\u000fQj4\u0000]d3[w?\u0005@l\u0005K";
      int var4 = "]vt\u0010Qq\u0004[j4\u000fQj4\u0000]d3[w?\u0005@l\u0005K\u0006Aq;\u0012Ap\u0010\u001dj*\u0012\u001bg\u0018Qn?\u0014\u001bq\u0014\u001ca\u000eK|#\u001fyN\u0013VM\u0012\u000bYp\u0004\u000f\\j>\u0003\u001as\u0005]u?\u0014@j\u0012A\u000bV`)\u0005Fj\u0007Fl5\b\u0006^d.\u0003Gw\tBd.\u0005\\W\u000eB`\u000fXd,\u0007\u001au\u001a\u001cs?\u0014Gj\u0018\\\u0007]vt\u0007F`\u001f\u0013\\j>\u0003\u0019f\u000fF+*\u0014[s\u0012@q3\u0003G\u0007Bd.\u0005\\J\u0013\fXd,\u0007\u001au\u001a\u001ck;\u000bQ\u0007D`(\u0015]l\u0019\fAv='Ds\u001b[d4\u0005Q/ww(\tF#\u0005Wq(\u000fQu\u001e\\bz\n]`\u0012\\v?F]m\u0011]w7\u0007@j\u0018\\)z\u0005Uv\u0004W8!VI\u0004Fw/\u0003\u000fQj4\u0000]d3[w?\u0005@l\u0005K"
         .length();
      char var1 = '\n';
      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) {
                     g = var5;
                     a = Logger.getLogger(LocalClusterNodeInfoHelper.class.getName());
                     return;
                  }

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

                  var2 = "\u0014?=A\u001c'[\u000e\u0011-eNS<SU:vA\u0019%L";
                  var4 = "\u0014?=A\u001c'[\u000e\u0011-eNS<SU:vA\u0019%L".length();
                  var1 = 7;
                  var7 = -1;
            }

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

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

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

      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 -> 2;
            case 1 -> 53;
            case 2 -> 106;
            case 3 -> 86;
            case 4 -> 4;
            case 5 -> 51;
            default -> 71;
         });
      }

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