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

import com.l7tech.external.assertions.gatewaygraphql.GatewayGraphQLAssertion;
import com.l7tech.gateway.api.impl.MarshallingUtils;
import com.l7tech.gateway.common.LicenseManager;
import com.l7tech.gateway.common.service.ServiceTemplate;
import com.l7tech.gateway.common.service.ServiceType;
import com.l7tech.server.event.system.LicenseChangeEvent;
import com.l7tech.server.service.ServiceTemplateManager;
import com.l7tech.server.util.ApplicationEventProxy;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.IOUtils;
import jakarta.xml.bind.JAXBException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

public class GatewayGraphQLModuleLifecycle implements ApplicationListener<ApplicationEvent> {
   private static final Logger a;
   private static final String b;
   private static GatewayGraphQLModuleLifecycle c;
   private final ServiceTemplateManager d;
   private final ApplicationEventProxy e;
   private final ApplicationContext f;
   private ServiceTemplate g;
   private static final String h;
   private static final String i;
   private static final String[] j;

   public static synchronized void onModuleLoaded(ApplicationContext var0) {
      try {
         if (c != null) {
            a.log(Level.WARNING, j[20]);
            return;
         }
      } catch (JAXBException var10) {
         throw a(var10);
      }

      GatewayGraphQLModuleLifecycle var1 = new GatewayGraphQLModuleLifecycle(var0);
      var1.c();
      c = var1;
      ClassLoader var2 = Thread.currentThread().getContextClassLoader();

      try {
         Thread.currentThread().setContextClassLoader(GatewayGraphQLAssertion.class.getClassLoader());
         MarshallingUtils.getJAXBContext();
      } catch (JAXBException var8) {
         a.log(Level.WARNING, ExceptionUtils.getDebugException(var8), () -> j[15] + var8.getMessage());
      } finally {
         Thread.currentThread().setContextClassLoader(var2);
      }
   }

   public static synchronized void onModuleUnloaded() {
      GatewayGraphQLModuleLifecycle var0 = c;
      if (var0 != null) {
         a.log(Level.INFO, j[1]);

         try {
            var0.d();
         } catch (Exception var5) {
            a.log(Level.WARNING, ExceptionUtils.getDebugException(var5), () -> j[11] + ExceptionUtils.getMessage(var5));
         } finally {
            c = null;
         }
      }
   }

   public GatewayGraphQLModuleLifecycle(ApplicationContext var1) {
      String[] var2 = j;
      this.d = (ServiceTemplateManager)var1.getBean(var2[7], ServiceTemplateManager.class);
      this.e = (ApplicationEventProxy)var1.getBean(var2[13], ApplicationEventProxy.class);
      this.e.addApplicationListener(this);
      this.f = var1;
   }

   public void onApplicationEvent(@NotNull ApplicationEvent var1) {
      try {
         if (var1 == null) {
            a(0);
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      try {
         if (var1 instanceof LicenseChangeEvent) {
            this.b();
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }
   }

   static ServiceTemplate a() {
      ServiceTemplate var0 = null;

      try {
         String var1 = h();
         String[] var2 = j;
         var0 = new ServiceTemplate(var2[16], var2[6], var1, ServiceType.OTHER_INTERNAL_SERVICE, null);
      } catch (IOException var3) {
         a.log(Level.WARNING, j[2], var3);
      }

      return var0;
   }

   private void b() {
      try {
         if (this.e()) {
            this.f();
            return;
         }
      } catch (IllegalArgumentException var1) {
         throw a(var1);
      }

      this.g();
   }

   private void c() {
      this.g = a();
      this.a(this.g);
   }

   private void d() {
      try {
         c.g();
         if (this.e != null) {
            this.e.removeApplicationListener(this);
         }
      } catch (IllegalArgumentException var1) {
         throw a(var1);
      }
   }

   private boolean e() {
      LicenseManager var1 = (LicenseManager)this.f.getBean(j[8], LicenseManager.class);
      return var1.isFeatureEnabled(new GatewayGraphQLAssertion().getFeatureSetName());
   }

   private void f() {
      try {
         if (!this.e()) {
            a.warning(j[9]);
            return;
         }
      } catch (IllegalArgumentException var1) {
         throw a(var1);
      }

      this.a(this.g);
   }

   private void g() {
      this.b(this.g);
   }

   private void a(ServiceTemplate var1) {
      try {
         if (var1 == null) {
            return;
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      Logger var10000 = a;
      String var10001 = var1.getName();
      String var10002 = var1.getDefaultUriPrefix();
      String[] var2 = j;
      var10000.info(var2[0] + var10001 + var2[12] + var10002 + ")");
      this.d.register(var1, var2[18]);
   }

   private void b(ServiceTemplate var1) {
      try {
         if (var1 == null) {
            return;
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      Logger var10000 = a;
      String var10001 = var1.getName();
      String var10002 = var1.getDefaultUriPrefix();
      String[] var2 = j;
      var10000.info(var2[14] + var10001 + var2[22] + var10002 + ")");
      this.d.unregister(var1);
   }

   private static String h() throws IOException {
      InputStream var0 = GatewayGraphQLModuleLifecycle.class.getClassLoader().getResourceAsStream(j[17]);

      String var2;
      try {
         byte[] var1 = IOUtils.slurpStream(var0);
         var2 = new String(var1, StandardCharsets.UTF_8);
      } catch (Throwable var5) {
         if (var0 != null) {
            try {
               var0.close();
            } catch (Throwable var3) {
               var5.addSuppressed(var3);
            }
         }

         throw var5;
      }

      try {
         if (var0 != null) {
            var0.close();
         }

         return var2;
      } catch (Throwable var4) {
         throw a(var4);
      }
   }

   static {
      String[] var5 = new String[24];
      int var3 = 0;
      String var2 = "\u0000oW\n_\b0 c^\u0004\f\b=7*\u00172\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\8=nE\u000fI\\<!*C\u000bY\b!;dWCH\u0013\"<J\u0011k^\rC\bu>eQ\u0007\f+\u0006\u0016F\u0010\u0002B\u0018z=x\u00103C\u0010<1s\u0010;a0nryU\u0011Z\u001567*D\u0006A\f93~UC[\u00159>*^\fX\\77*Q\u0015M\u001593h\\\u0006R1e]L@K!7iXLI\u0004!7x^\u0002@S4!yU\u0011X\u0015:<y\u001f\u0004M\b0%kI\u0004^\u001d%:{\\L_\u0019'$oBLk\u001d!7}Q\u001ak\u000e4\"ba/a\u00131'fU/E\u001a01sS\u000fII1e]L@K!7iXLI\u0004!7x^\u0002@S4!yU\u0011X\u0015:<y\u001f\u0004M\b0%kI\u0004^\u001d%:{\\LK\u000e4\"b]\u0002B#17lQ\u0016@\b\n\"e\\\nO\u0005{*g\\\u00057|U\rX\t}mB\u0002\\\u001483d\u0016!oB\u0015E\u001f0\u0006o]\u0013@\u001d!7GQ\rM\u001b0 \u000e>cS\u0006B\u000f0\u001fk^\u0002K\u0019'h\u0006bUCk\u001d!7}Q\u001a\f;'3zX2`\\4!yU\u0011X\u0015:<*]\fH\t97*Y\u0010\f\u0012:&*\\\nO\u0019;!oTM\f(=7*w\u0002X\u0019\"3s\u0010$^\u001d%:[|C_\u0019'$cS\u0006\f\u000b<>f\u0010\rC\bu0o\u0010\u0002Z\u001d<>kR\u000fIR>\u0013xW\u0016A\u0019;&*V\f^\\\u0015\u001ceD-Y\u00109rzQ\u0011M\u00110&oBC\u000bY&u*_\u0005\fY&|/CCA\t&&*^\fX\\77*^\u0016@\u0010?\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\8=nE\u000fI\\!:xU\u0014\f\u0019-1o@\u0017E\u0013;re^C_\u0014 &n_\u0014BFu*u*C\u0006^\n<1o\u0010\u0014E\b=r~X\u0006\f\u001b4&oG\u0002U\\}\u0000eE\u0017E\u00122r_b*\fAu\u00153z@\u000fE\u001f4&c_\ri\n0<~`\u0011C\u0004,\u0013\u0007dB\u0006K\u0015&&oB\nB\u001bu&bUC\u000bK\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\8=nE\u000fI\\33c\\\u0006H\\!=*@\u0011C\f0 fIC@\u001346*D\u000bI\\\u001f\u0013Rr C\u0012!7rDY\f\"\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\\u00067xF\nO\u0019I1e]L@K!7iXLI\u0004!7x^\u0002@S4!yU\u0011X\u0015:<y\u001f\u0004M\b0%kI\u0004^\u001d%:{\\LK\u000e4\"b]\u0002B#17lQ\u0016@\b\n\"e\\\nO\u0005{*g\\\b5xQ\u0013D\u00114<\"\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\\u00067xF\nO\u00198\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\8=nE\u000fI\\<!*Q\u000f^\u001946s\u0010\nB\u0015!;k\\\nV\u00191\t}mB\u0002\\\u001483d";
      int var4 = "\u0000oW\n_\b0 c^\u0004\f\b=7*\u00172\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\8=nE\u000fI\\<!*C\u000bY\b!;dWCH\u0013\"<J\u0011k^\rC\bu>eQ\u0007\f+\u0006\u0016F\u0010\u0002B\u0018z=x\u00103C\u0010<1s\u0010;a0nryU\u0011Z\u001567*D\u0006A\f93~UC[\u00159>*^\fX\\77*Q\u0015M\u001593h\\\u0006R1e]L@K!7iXLI\u0004!7x^\u0002@S4!yU\u0011X\u0015:<y\u001f\u0004M\b0%kI\u0004^\u001d%:{\\L_\u0019'$oBLk\u001d!7}Q\u001ak\u000e4\"ba/a\u00131'fU/E\u001a01sS\u000fII1e]L@K!7iXLI\u0004!7x^\u0002@S4!yU\u0011X\u0015:<y\u001f\u0004M\b0%kI\u0004^\u001d%:{\\LK\u000e4\"b]\u0002B#17lQ\u0016@\b\n\"e\\\nO\u0005{*g\\\u00057|U\rX\t}mB\u0002\\\u001483d\u0016!oB\u0015E\u001f0\u0006o]\u0013@\u001d!7GQ\rM\u001b0 \u000e>cS\u0006B\u000f0\u001fk^\u0002K\u0019'h\u0006bUCk\u001d!7}Q\u001a\f;'3zX2`\\4!yU\u0011X\u0015:<*]\fH\t97*Y\u0010\f\u0012:&*\\\nO\u0019;!oTM\f(=7*w\u0002X\u0019\"3s\u0010$^\u001d%:[|C_\u0019'$cS\u0006\f\u000b<>f\u0010\rC\bu0o\u0010\u0002Z\u001d<>kR\u000fIR>\u0013xW\u0016A\u0019;&*V\f^\\\u0015\u001ceD-Y\u00109rzQ\u0011M\u00110&oBC\u000bY&u*_\u0005\fY&|/CCA\t&&*^\fX\\77*^\u0016@\u0010?\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\8=nE\u000fI\\!:xU\u0014\f\u0019-1o@\u0017E\u0013;re^C_\u0014 &n_\u0014BFu*u*C\u0006^\n<1o\u0010\u0014E\b=r~X\u0006\f\u001b4&oG\u0002U\\}\u0000eE\u0017E\u00122r_b*\fAu\u00153z@\u000fE\u001f4&c_\ri\n0<~`\u0011C\u0004,\u0013\u0007dB\u0006K\u0015&&oB\nB\u001bu&bUC\u000bK\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\8=nE\u000fI\\33c\\\u0006H\\!=*@\u0011C\f0 fIC@\u001346*D\u000bI\\\u001f\u0013Rr C\u0012!7rDY\f\"\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\\u00067xF\nO\u0019I1e]L@K!7iXLI\u0004!7x^\u0002@S4!yU\u0011X\u0015:<y\u001f\u0004M\b0%kI\u0004^\u001d%:{\\LK\u000e4\"b]\u0002B#17lQ\u0016@\b\n\"e\\\nO\u0005{*g\\\b5xQ\u0013D\u00114<\"\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\\u00067xF\nO\u00198\u0015kD\u0006[\u001d,rMB\u0002\\\u0014\u0004\u001e*}\u0002B\u001d27gU\rX\\8=nE\u000fI\\<!*Q\u000f^\u001946s\u0010\nB\u0015!;k\\\nV\u00191\t}mB\u0002\\\u001483d"
         .length();
      char var1 = 17;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 63;
         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) {
                     j = var5;
                     String[] var9 = j;
                     b = j[4];
                     i = var9[21];
                     h = var9[19];
                     a = Logger.getLogger(GatewayGraphQLModuleLifecycle.class.getName());
                     c = null;
                     return;
                  }

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

                  var2 = "O\u0010y<d0\u0006\u000bU*.\u007f2\u0007HDb<6!\u000e\u001cU}8ofG:_\u007f-\u007f(\bHeX\u00106{O\u0012\u0007^K)f*\u0006\u000bQ~0y(*\u001eUd-";
                  var4 = "O\u0010y<d0\u0006\u000bU*.\u007f2\u0007HDb<6!\u000e\u001cU}8ofG:_\u007f-\u007f(\bHeX\u00106{O\u0012\u0007^K)f*\u0006\u000bQ~0y(*\u001eUd-"
                     .length();
                  var1 = '*';
                  var7 = -1;
            }

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

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

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

      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 -> 109;
            case 1 -> 53;
            case 2 -> 15;
            case 3 -> 92;
            case 4 -> 19;
            case 5 -> 67;
            default -> 106;
         });
      }

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