package com.l7tech.server.util;

import com.l7tech.server.policy.module.AssertionModuleUnregistrationEvent;
import com.l7tech.util.ExceptionUtils;
import java.util.ArrayList;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;

public class ApplicationEventProxy implements ApplicationListener, ApplicationEventPublisher, Ordered {
   private static final Logger a = Logger.getLogger(ApplicationEventProxy.class.getName());
   final Set<ApplicationListener> b = new CopyOnWriteArraySet<>();
   final boolean c;
   private static final String d;

   public ApplicationEventProxy() {
      this(true);
   }

   public ApplicationEventProxy(boolean var1) {
      this.c = var1;
   }

   public void addApplicationListener(ApplicationListener var1) {
      try {
         if (var1 == null) {
            throw new NullPointerException(d);
         }
      } catch (NullPointerException var2) {
         throw a(var2);
      }

      this.b.add(var1);
   }

   public void removeApplicationListener(ApplicationListener var1) {
      this.b.remove(var1);
   }

   public boolean isPrimaryChannel() {
      return this.c;
   }

   public void onApplicationEvent(ApplicationEvent var1) {
      try {
         if (var1 instanceof AssertionModuleUnregistrationEvent) {
            this.a(((AssertionModuleUnregistrationEvent)var1).getModuleClassLoader());
         }
      } catch (NullPointerException var3) {
         throw a(var3);
      }

      try {
         if (this.isPrimaryChannel()) {
            this.a(var1);
         }
      } catch (NullPointerException var2) {
         throw a(var2);
      }
   }

   public int getOrder() {
      return 0;
   }

   private void a(ApplicationEvent var1) {
      for (ApplicationListener var3 : this.b) {
         try {
            var3.onApplicationEvent(var1);
         } catch (Exception var5) {
            a.log(Level.WARNING, ExceptionUtils.getMessage(var5), ExceptionUtils.getDebugException(var5));
         }
      }
   }

   void a(ClassLoader var1) {
      ArrayList var2 = new ArrayList<>(this.b);
      ArrayList var3 = new ArrayList();

      for (ApplicationListener var5 : var2) {
         try {
            if (var5.getClass().getClassLoader() == var1) {
               var3.add(var5);
            }
         } catch (NullPointerException var6) {
            throw a(var6);
         }
      }

      this.b.removeAll(var3);
   }

   public void publishEvent(ApplicationEvent var1) {
      this.a(var1);
   }

   public void publishEvent(Object var1) {
      try {
         if (var1 instanceof ApplicationEvent) {
            this.a((ApplicationEvent)var1);
            return;
         }
      } catch (NullPointerException var2) {
         throw a(var2);
      }

      throw new UnsupportedOperationException();
   }

   static {
      String var10002 = a(3, a("]X\fr5\u0010bC"));
      byte var10001 = -1;
      d = var10002;
   }

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

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

      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 -> 50;
            case 1 -> 50;
            case 2 -> 124;
            case 3 -> 5;
            case 4 -> 83;
            case 5 -> 125;
            default -> 4;
         });
      }

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