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

import com.l7tech.external.assertions.gatewaygraphql.server.data.L7ServiceDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.data.ServiceResolversDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.util.Util;
import com.l7tech.gateway.common.service.PublishedService;
import com.l7tech.objectmodel.FindException;
import com.l7tech.server.service.ServiceCache;
import com.l7tech.server.service.ServiceManager;
import com.l7tech.server.service.resolution.ServiceResolutionException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;

public class SoapServiceFinder {
   private final ServiceCache a;
   private final ServiceManager b;
   private static final String c;

   public SoapServiceFinder(ServiceManager var1, ServiceCache var2) {
      this.b = var1;
      this.a = var2;
   }

   public Collection<PublishedService> find(L7ServiceDTO.ServiceResolversInput var1) throws FindException {
      try {
         List var3 = this.a
            .resolve(null, var1.getNormalizedSoapAction(), var1.getBaseUri())
            .stream()
            .filter(PublishedService::isSoap)
            .filter(
               var1x -> var1.getResolutionPath() == null
                  || Objects.equals(Util.emptyToNull(var1x.getRoutingUri()), Util.emptyToNull(var1.getNormalizedResolutionPath()))
            )
            .toList();
         List var2;
         if (var3.isEmpty()) {
            var2 = this.b
               .findByRoutingUri(Util.emptyToNull(var1.getNormalizedResolutionPath()))
               .stream()
               .filter(PublishedService::isSoap)
               .filter(PublishedService::isDisabled)
               .filter(var2x -> this.a(var2x, var1))
               .toList();
         } else {
            var2 = new ArrayList();

            for (PublishedService var5 : var3) {
               var2.add((PublishedService)this.b.findByPrimaryKey(var5.getGoid()));
            }
         }

         return var2;
      } catch (ServiceResolutionException var6) {
         throw new FindException(c, var6);
      }
   }

   public boolean matches(PublishedService var1, L7ServiceDTO.ServiceResolversInput var2) {
      return this.a(var1, var2);
   }

   private boolean a(PublishedService var1, L7ServiceDTO.ServiceResolversInput var2) {
      ServiceResolversDTO var3 = ServiceResolversDTO.get(var1);
      return Util.isNotEmpty(var3.getSoapActions()) && Util.isNotEmpty(var2.getNormalizedSoapAction())
         ? var3.getSoapActions().contains(var2.getNormalizedSoapAction())
         : Objects.equals(var3.getBaseUri(), var2.getBaseUri());
   }

   static {
      String var10002 = a(58, a("B\u001bZ ])~i\nG:A}~u\fLoX`ooI\\'J)hb\u001b^&Ll;u\f[ C|on\u0006FoXark\f\b#@fpn\u0007OoIfi'\u001d@*\u000fztf\u0019\b<J{mn\nM"));
      byte var10001 = -1;
      c = var10002;
   }

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

      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 -> 61;
            case 1 -> 83;
            case 2 -> 18;
            case 3 -> 117;
            case 4 -> 21;
            case 5 -> 51;
            default -> 33;
         });
      }

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