package com.l7tech.server.wsdm;

import com.l7tech.common.io.XmlUtil;
import com.l7tech.gateway.common.service.PublishedService;
import com.l7tech.message.Message;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.event.EntityInvalidationEvent;
import com.l7tech.server.event.ServiceEnablementEvent;
import com.l7tech.server.service.ServiceCache;
import com.l7tech.server.util.PostStartupApplicationListener;
import com.l7tech.server.wsdm.faults.FaultMappableException;
import com.l7tech.server.wsdm.faults.ResourceUnknownFault;
import com.l7tech.server.wsdm.method.ESMMethod;
import com.l7tech.server.wsdm.method.GetMultipleResourceProperties;
import com.l7tech.server.wsdm.method.Renew;
import com.l7tech.server.wsdm.method.Subscribe;
import com.l7tech.server.wsdm.method.Unsubscribe;
import com.l7tech.server.wsdm.subscription.ServiceStateMonitor;
import com.l7tech.server.wsdm.subscription.Subscription;
import com.l7tech.server.wsdm.subscription.SubscriptionNotifier;
import com.l7tech.server.wsdm.util.EsmUtils;
import com.l7tech.util.InvalidDocumentFormatException;
import com.l7tech.xml.soap.SoapUtil;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.context.ApplicationEvent;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

public class ServiceManagementAdministrationService implements PostStartupApplicationListener {
   private static final Logger a;
   @Inject
   private QoSMetricsService qosService;
   @Inject
   private SubscriptionNotifier subscriptionNotifier;
   @Inject
   private ServiceCache serviceCache;
   private final ArrayList<ServiceStateMonitor> b = new ArrayList<>();
   private final List<ServiceStateMonitor> c;
   private static final String[] d;

   public ServiceManagementAdministrationService(List<ServiceStateMonitor> var1) {
      this.c = var1;
   }

   @PostConstruct
   public void start() {
      this.b.add(this.subscriptionNotifier);
      this.b.addAll(this.c);
   }

   public Document handleESMRequest(Goid var1, Message var2) throws FaultMappableException, IOException, SAXException {
      ESMMethod var3 = ESMMethod.resolve(var2, var1);

      try {
         if (var3 instanceof GetMultipleResourceProperties) {
            return this.qosService.handleMultipleResourcePropertiesRequest((GetMultipleResourceProperties)var3);
         }
      } catch (FaultMappableException var4) {
         throw a(var4);
      }

      throw new FaultMappableException(this.a(var3));
   }

   public Document handleSubscriptionRequest(Goid param1, Message param2, String param3) throws FaultMappableException, IOException, SAXException {
      // $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 2
      // 01: aload 1
      // 02: invokestatic com/l7tech/server/wsdm/method/ESMMethod.resolve (Lcom/l7tech/message/Message;Lcom/l7tech/objectmodel/Goid;)Lcom/l7tech/server/wsdm/method/ESMMethod;
      // 05: astore 4
      // 07: aload 4
      // 09: instanceof com/l7tech/server/wsdm/method/Renew
      // 0c: ifeq 1e
      // 0f: aload 0
      // 10: aload 4
      // 12: checkcast com/l7tech/server/wsdm/method/Renew
      // 15: aload 3
      // 16: invokevirtual com/l7tech/server/wsdm/ServiceManagementAdministrationService.a (Lcom/l7tech/server/wsdm/method/Renew;Ljava/lang/String;)Lorg/w3c/dom/Document;
      // 19: areturn
      // 1a: invokestatic com/l7tech/server/wsdm/ServiceManagementAdministrationService.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 1d: athrow
      // 1e: aload 4
      // 20: instanceof com/l7tech/server/wsdm/method/Subscribe
      // 23: ifeq 35
      // 26: aload 0
      // 27: aload 4
      // 29: checkcast com/l7tech/server/wsdm/method/Subscribe
      // 2c: aload 3
      // 2d: invokevirtual com/l7tech/server/wsdm/ServiceManagementAdministrationService.a (Lcom/l7tech/server/wsdm/method/Subscribe;Ljava/lang/String;)Lorg/w3c/dom/Document;
      // 30: areturn
      // 31: invokestatic com/l7tech/server/wsdm/ServiceManagementAdministrationService.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 34: athrow
      // 35: aload 4
      // 37: instanceof com/l7tech/server/wsdm/method/Unsubscribe
      // 3a: ifeq 4b
      // 3d: aload 0
      // 3e: aload 4
      // 40: checkcast com/l7tech/server/wsdm/method/Unsubscribe
      // 43: invokevirtual com/l7tech/server/wsdm/ServiceManagementAdministrationService.a (Lcom/l7tech/server/wsdm/method/Unsubscribe;)Lorg/w3c/dom/Document;
      // 46: areturn
      // 47: invokestatic com/l7tech/server/wsdm/ServiceManagementAdministrationService.a (Ljava/lang/Throwable;)Ljava/lang/Throwable;
      // 4a: athrow
      // 4b: new com/l7tech/server/wsdm/faults/FaultMappableException
      // 4e: dup
      // 4f: aload 0
      // 50: aload 4
      // 52: invokevirtual com/l7tech/server/wsdm/ServiceManagementAdministrationService.a (Lcom/l7tech/server/wsdm/method/ESMMethod;)Ljava/lang/String;
      // 55: invokespecial com/l7tech/server/wsdm/faults/FaultMappableException.<init> (Ljava/lang/String;)V
      // 58: athrow
      // 59: astore 5
      // 5b: getstatic com/l7tech/server/wsdm/ServiceManagementAdministrationService.a Ljava/util/logging/Logger;
      // 5e: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
      // 61: aload 4
      // 63: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
      // 66: getstatic com/l7tech/server/wsdm/ServiceManagementAdministrationService.d [Ljava/lang/String;
      // 69: bipush 8
      // 6b: aaload
      // 6c: swap
      // 6d: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 72: aload 5
      // 74: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
      // 77: new com/l7tech/server/wsdm/faults/FaultMappableException
      // 7a: dup
      // 7b: aload 5
      // 7d: invokevirtual org/xml/sax/SAXException.getMessage ()Ljava/lang/String;
      // 80: invokespecial com/l7tech/server/wsdm/faults/FaultMappableException.<init> (Ljava/lang/String;)V
      // 83: athrow
      // try (4 -> 12): 43 org/xml/sax/SAXException
      // try (4 -> 13): 13 com/l7tech/server/wsdm/faults/FaultMappableException
      // try (15 -> 23): 43 org/xml/sax/SAXException
      // try (15 -> 24): 24 com/l7tech/server/wsdm/faults/FaultMappableException
      // try (26 -> 33): 43 org/xml/sax/SAXException
      // try (26 -> 34): 34 com/l7tech/server/wsdm/faults/FaultMappableException
      // try (36 -> 43): 43 org/xml/sax/SAXException
   }

   private String a(ESMMethod var1) {
      String var2;
      if (var1 == null) {
         String[] var3 = d;
         var2 = var3[0];
      } else {
         var2 = d[9] + var1.toString();
      }

      return var2;
   }

   private Document a(Unsubscribe var1) throws SAXException, ResourceUnknownFault {
      this.subscriptionNotifier.unsubscribe(var1.getSubscriptionIdValue());
      String var2 = var1.respond(var1.getIncomingUrl().toString());
      return XmlUtil.stringToDocument(var2);
   }

   private Document a(Subscribe var1, String var2) throws SAXException, FaultMappableException {
      String var3 = this.a(var1.getIncomingUrl().toString(), var1.getReqestDoc());

      label17: {
         try {
            if (var3 == null) {
               break label17;
            }

            var1.setServiceId(var3);
         } catch (SAXException var7) {
            throw a(var7);
         }

         Subscription var4 = this.subscriptionNotifier.subscribe(var1, var2);
         String var5 = var1.respond(var1.getIncomingUrl().toString(), var4.getUuid());
         return XmlUtil.stringToDocument(var5);
      }

      String[] var6 = d;
      a.warning(var6[11]);
      throw new ResourceUnknownFault(var6[7]);
   }

   private String a(String var1, Document var2) throws ResourceUnknownFault {
      String var3 = EsmUtils.determineServiceFromUrl(var1, this.serviceCache);

      try {
         if (var3 != null) {
            return var3;
         }
      } catch (InvalidDocumentFormatException var10) {
         throw a(var10);
      }

      Element var4 = null;

      try {
         var4 = SoapUtil.getHeaderElement(var2);
      } catch (InvalidDocumentFormatException var8) {
         String[] var7 = d;
         a.log(Level.WARNING, var7[5], var8);
      }

      if (var4 != null) {
         String[] var10001 = new String[2];
         String[] var12 = d;
         var10001[0] = var12[2];
         var10001[1] = var12[10];
         Element var5 = XmlUtil.findFirstChildElementByName(var4, var10001, var12[12]);
         if (var5 != null) {
            String var6 = XmlUtil.getTextValue(var5);
            var3 = EsmUtils.determineServiceFromUrl(var6, this.serviceCache);

            try {
               if (var3 != null) {
                  return var3;
               }
            } catch (InvalidDocumentFormatException var9) {
               throw a(var9);
            }

            var12 = d;
            a.warning(var12[4] + var6);
         } else {
            var12 = d;
            a.info(var12[6]);
         }
      }

      a.warning(d[3]);
      return null;
   }

   private Document a(Renew var1, String var2) throws SAXException, FaultMappableException {
      this.subscriptionNotifier.renewSubscription(var1.getSubscriptionIdValue(), var1.getTermination(), var2);
      String var3 = var1.respond(var1.getIncomingUrl().toString());
      return XmlUtil.stringToDocument(var3);
   }

   @Override
   public void onApplicationEvent(ApplicationEvent var1) {
      try {
         if (!(var1 instanceof EntityInvalidationEvent)) {
            return;
         }
      } catch (Throwable var11) {
         throw a(var11);
      }

      try {
         EntityInvalidationEvent var2 = (EntityInvalidationEvent)var1;
         if (!PublishedService.class.isAssignableFrom(var2.getEntityClass())) {
            return;
         }

         for (int var3 = 0; var3 < var2.getEntityIds().length; var3++) {
            Goid var4 = var2.getEntityIds()[var3];
            char var5 = var2.getEntityOperations()[var3];
            switch (var5) {
               case 'C':
                  for (ServiceStateMonitor var15 : this.b) {
                     var15.onServiceCreated(var4);
                  }
                  break;
               case 'D':
                  for (ServiceStateMonitor var14 : this.b) {
                     var14.onServiceDeleted(var4);
                  }
                  break;
               case 'U':
                  if (var2 instanceof ServiceEnablementEvent var6) {
                     for (ServiceStateMonitor var8 : this.b) {
                        try {
                           if (var6.isEnabled()) {
                              var8.onServiceEnabled(var4);
                              continue;
                           }
                        } catch (Throwable var9) {
                           throw a(var9);
                        }

                        var8.onServiceDisabled(var4);
                     }
                  }
            }
         }
      } catch (Throwable var10) {
         a.log(Level.SEVERE, d[1], var10);
      }
   }

   static {
      String[] var5 = new String[13];
      int var3 = 0;
      String var2 = "}\u0010$|-\"eZ\n2m}=zM\f6}4=d\u0006+}\u00102q-7i\\\u001b3)8 xG\fwa<<nD\u00179n}3zX\u0012>j<&cG\u0010wl+7d\\+@\n#yg}%L\u00114zs=k[\u0017$$2\"oFP8{:}}[\u001a:&0'}[Oz;s*yL9K\u001f9g2&*L\u001b3|>7*[\u001b%\u007f41o\b\t?f.7*Z\u001b$f( iM^>m}&bA\rw`.rgM\u001f9}}4eZ0K\u0011\"e9rdG\nwl%&xI\u001d#)<ryM\f!`>7*A\u001awo/=g\b\n?l}\"k\\\n2{3r\u0014M\f%f/rmM\n#`35*@\u001b6m8 \u001ff\u0011w[8!e]\f4l\u00146*M\u00122d8<~\b\u00179)57kL\u001b%\u0014z\u001b$f( iM^\u001eM} oY\u000b>{86!x\f8k17g\b\u001d8g.&x]\u001d#`35*Z\u001b$y2<yM^#f}\u0016e\u001b#a26*F\u0011#).'zX\u0011%}860\b+@\n#yg}%L\u00114zs=k[\u0017$$2\"oFP8{:}}[\u001a:&0'}[Lz;s*yL";
      int var4 = "}\u0010$|-\"eZ\n2m}=zM\f6}4=d\u0006+}\u00102q-7i\\\u001b3)8 xG\fwa<<nD\u00179n}3zX\u0012>j<&cG\u0010wl+7d\\+@\n#yg}%L\u00114zs=k[\u0017$$2\"oFP8{:}}[\u001a:&0'}[Oz;s*yL9K\u001f9g2&*L\u001b3|>7*[\u001b%\u007f41o\b\t?f.7*Z\u001b$f( iM^>m}&bA\rw`.rgM\u001f9}}4eZ0K\u0011\"e9rdG\nwl%&xI\u001d#)<ryM\f!`>7*A\u001awo/=g\b\n?l}\"k\\\n2{3r\u0014M\f%f/rmM\n#`35*@\u001b6m8 \u001ff\u0011w[8!e]\f4l\u00146*M\u00122d8<~\b\u00179)57kL\u001b%\u0014z\u001b$f( iM^\u001eM} oY\u000b>{86!x\f8k17g\b\u001d8g.&x]\u001d#`35*Z\u001b$y2<yM^#f}\u0016e\u001b#a26*F\u0011#).'zX\u0011%}860\b+@\n#yg}%L\u00114zs=k[\u0017$$2\"oFP8{:}}[\u001a:&0'}[Lz;s*yL"
         .length();
      char var1 = 22;
      int var7 = -1;

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

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

                  var2 = "\u0005uK\u0004@^\u001d&t@\u0018M\f\u00009 HWPI\u0006 iJ\u0012\u0003[\u001d\"hF\u0002W\f\u00158y\t\u0005F_\u001b#rJ\u0012\u0003E\u0010vsY\u0012@E\u0012?eM\n\u0004eZ\u0018V^\u00173IM";
                  var4 = "\u0005uK\u0004@^\u001d&t@\u0018M\f\u00009 HWPI\u0006 iJ\u0012\u0003[\u001d\"hF\u0002W\f\u00158y\t\u0005F_\u001b#rJ\u0012\u0003E\u0010vsY\u0012@E\u0012?eM\n\u0004eZ\u0018V^\u00173IM"
                     .length();
                  var1 = ';';
                  var7 = -1;
            }

            var10000 = 100;
            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] ^ 16);
      }

      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 -> 100;
            case 2 -> 77;
            case 3 -> 19;
            case 4 -> 71;
            case 5 -> 72;
            default -> 16;
         });
      }

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