package com.l7tech.external.assertions.gatewaymanagement.server.rest.resource;

import com.l7tech.external.assertions.gatewaymanagement.server.ResourceFactory;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.factories.APIResourceFactory;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.transformers.APITransformer;
import com.l7tech.gateway.api.Item;
import com.l7tech.gateway.api.ItemsList;
import com.l7tech.gateway.api.Link;
import com.l7tech.gateway.api.ManagedObjectFactory;
import com.l7tech.objectmodel.EntityHeader;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.UriBuilder;
import jakarta.ws.rs.core.UriInfo;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public abstract class RestEntityResource<R, F extends APIResourceFactory<R>, T extends APITransformer<R, ?>> implements URLAccessible<R> {
   public static final String RestEntityResource_version_URI;
   protected F factory;
   protected T transformer;
   @Context
   protected UriInfo uriInfo;
   private static final String[] d;

   public abstract void setFactory(F var1);

   public abstract void setTransformer(T var1);

   @NotNull
   @Override
   public String getResourceType() {
      try {
         String var10000 = this.factory.getResourceType();
         if (var10000 == null) {
            a(0);
         }

         return var10000;
      } catch (IllegalArgumentException var1) {
         throw a(var1);
      }
   }

   @NotNull
   protected String getUrlString(@Nullable String var1) {
      UriBuilder var2 = this.uriInfo.getBaseUriBuilder().path(this.getClass());

      try {
         if (var1 != null) {
            var2.path(var1);
         }
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }

      try {
         String var10000 = var2.build(new Object[0]).toString();
         if (var10000 == null) {
            a(1);
         }

         return var10000;
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }
   }

   @NotNull
   protected String getUrlString(@NotNull Class<? extends URLAccessible> var1, @NotNull String var2) {
      try {
         if (var1 == null) {
            a(2);
         }
      } catch (IllegalArgumentException var5) {
         throw a(var5);
      }

      try {
         if (var2 == null) {
            a(3);
         }
      } catch (IllegalArgumentException var6) {
         throw a(var6);
      }

      UriBuilder var3 = this.uriInfo.getBaseUriBuilder().path(var1);

      try {
         var3.path(var2);
         String var10000 = var3.build(new Object[0]).toString();
         if (var10000 == null) {
            a(4);
         }

         return var10000;
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }
   }

   @NotNull
   @Override
   public String getUrl(@NotNull R param1) {
      // $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 1
      // 01: ifnonnull 0f
      // 04: bipush 5
      // 05: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/RestEntityResource.a (I)V
      // 08: goto 0f
      // 0b: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/RestEntityResource.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0e: athrow
      // 0f: aload 1
      // 10: instanceof com/l7tech/gateway/api/ManagedObject
      // 13: ifeq 39
      // 16: aload 0
      // 17: aload 1
      // 18: checkcast com/l7tech/gateway/api/ManagedObject
      // 1b: invokevirtual com/l7tech/gateway/api/ManagedObject.getId ()Ljava/lang/String;
      // 1e: invokevirtual com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/RestEntityResource.getUrlString (Ljava/lang/String;)Ljava/lang/String;
      // 21: dup
      // 22: ifnonnull 38
      // 25: goto 2c
      // 28: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/RestEntityResource.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2b: athrow
      // 2c: bipush 6
      // 2e: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/RestEntityResource.a (I)V
      // 31: goto 38
      // 34: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/RestEntityResource.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 37: athrow
      // 38: areturn
      // 39: new java/lang/IllegalArgumentException
      // 3c: dup
      // 3d: aload 1
      // 3e: invokevirtual java/lang/Object.getClass ()Ljava/lang/Class;
      // 41: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
      // 44: getstatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/RestEntityResource.d [Ljava/lang/String;
      // 47: bipush 10
      // 49: aaload
      // 4a: swap
      // 4b: 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" ]
      // 50: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
      // 53: athrow
      // try (0 -> 4): 5 java/lang/IllegalArgumentException
      // try (7 -> 17): 18 java/lang/IllegalArgumentException
      // try (10 -> 22): 23 java/lang/IllegalArgumentException
   }

   @NotNull
   @Override
   public String getUrl(@NotNull EntityHeader var1) {
      try {
         if (var1 == null) {
            a(7);
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      try {
         String var10000 = this.getUrlString(var1.getStrId());
         if (var10000 == null) {
            a(8);
         }

         return var10000;
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }
   }

   @NotNull
   @Override
   public Link getLink(@NotNull R var1) {
      try {
         if (var1 == null) {
            a(9);
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      try {
         Link var10000 = ManagedObjectFactory.createLink(Link.LINK_REL_SELF, this.getUrl((R)var1));
         if (var10000 == null) {
            a(10);
         }

         return var10000;
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }
   }

   @NotNull
   @Override
   public List<Link> getRelatedLinks(@Nullable R var1) {
      ArrayList var2 = new ArrayList();

      try {
         var2.add(ManagedObjectFactory.createLink(Link.LINK_REL_TEMPLATE, this.getUrlString(d[16])));
         var2.add(ManagedObjectFactory.createLink(Link.LINK_REL_LIST, this.getUrlString(null)));
         if (var2 == null) {
            a(11);
         }

         return var2;
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }
   }

   protected Item<R> get(String var1) throws ResourceFactory.ResourceNotFoundException {
      Object var2 = this.factory.getResource(var1);
      return RestEntityResourceUtils.createGetResponseItem((R)var2, this.transformer, this);
   }

   protected ItemsList<R> list(String var1, Boolean var2, Map<String, List<Object>> var3) {
      return RestEntityResourceUtils.createItemsList(
         this.factory.listResources(var1, var2, var3), this.transformer, this, this.uriInfo.getRequestUri().toString()
      );
   }

   protected Item<R> createTemplateItem(@NotNull R var1) {
      try {
         if (var1 == null) {
            a(12);
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      return RestEntityResourceUtils.createTemplateItem((R)var1, this, this.getUrlString(d[9]));
   }

   protected Response create(R var1) throws ResourceFactory.ResourceNotFoundException, ResourceFactory.InvalidResourceException {
      this.factory.createResource((R)var1);
      return RestEntityResourceUtils.createCreateOrUpdatedResponseItem(var1, this.transformer, this, true);
   }

   protected Response update(R var1, String var2) throws ResourceFactory.ResourceFactoryException {
      boolean var3 = this.factory.resourceExists(var2);

      label29: {
         try {
            if (var3) {
               this.factory.updateResource(var2, (R)var1);
               break label29;
            }
         } catch (ResourceFactory.ResourceFactoryException var5) {
            throw a(var5);
         }

         this.factory.createResource(var2, (R)var1);
      }

      Object var10000;
      APITransformer var10001;
      RestEntityResource var10002;
      try {
         var10000 = var1;
         var10001 = this.transformer;
         var10002 = this;
         if (!var3) {
            return RestEntityResourceUtils.createCreateOrUpdatedResponseItem(var1, this.transformer, this, true);
         }
      } catch (ResourceFactory.ResourceFactoryException var4) {
         throw a(var4);
      }

      return RestEntityResourceUtils.createCreateOrUpdatedResponseItem(var10000, var10001, var10002, false);
   }

   protected void delete(String var1) throws ResourceFactory.ResourceNotFoundException {
      this.factory.deleteResource(var1);
   }

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

   static {
      String[] var5 = new String[21];
      int var3 = 0;
      String var2 = "\u001a\u0003\u0002_\u001fWX\u0011\t\u000e\u0014\u0016\u0012*\u0017\u0005\u000b\u0014\u001f]*\u0017\u0014\rZ\u0016\n?\u0001\u0015\u0006I\u000eL1\u001c\u0015L\\\u001bQ;\u0005\u0007\u001aV\u001bK?\u0015\u0003\u000e^\u0014Qq\u0001\u0003\u0011M\u001fWq\u0000\u0003\u0010OUW;\u0001\t\u0016I\u0019@q \u0003\u0010O?K*\u001b\u0012\u001ai\u001fV1\u0007\u0014\u0000^\u0006\u0015\u0003\u0017n\bI\u0006\u0015\u0003\u0017n\bI*2(\fO4P2\u001eF\u000e^\u000eM1\u0016FFHT\u0000-R\u000b\u0016H\u000e\u00050\u001d\u0012CI\u001fQ+\u0000\bCU\u000fI2\u000f\u0015\u0003\u0017i\u001fV1\u0007\u0014\u0000^.\\.\u0017X\u0011\t\u000e\u0014\u0016\u0012*\u0017\u0005\u000b\u0014\u001f]*\u0017\u0014\rZ\u0016\n?\u0001\u0015\u0006I\u000eL1\u001c\u0015L\\\u001bQ;\u0005\u0007\u001aV\u001bK?\u0015\u0003\u000e^\u0014Qq\u0001\u0003\u0011M\u001fWq\u0000\u0003\u0010OUW;\u0001\t\u0016I\u0019@q \u0003\u0010O?K*\u001b\u0012\u001ai\u001fV1\u0007\u0014\u0000^\b\u0000\u0003\u0010T\u000fW=\u0017\u0007\u0015\u0003\u0017w\u0013K5\b\u0006\u0003\u000eK\u0016D*\u001721\u0007\rU\u0015Q~\u0015\u0003\u0017\u001b\u000fW2R\u0000\fIZD~\u001c\t\r\u001b\u0017D0\u0013\u0001\u0006_ZJ<\u0018\u0003\u0000OZW;\u0001\t\u0016I\u0019@dR\f\u0015\u0003\u0017n\bI\r\u0006\u0014\nU\u001d\u0004CHS\u0014\u0002\u001b\u0002\u0007\u0015\u0003\u0017w\u0013K5\u0012\u0007\u0014\u000fz\u0019F;\u0001\u0015\nY\u0016@\u001d\u001e\u0007\u0010H\b\u0006\u0003\u000eK\u0016D*\u0017\f\u0015\u0003\u0017n\bI\r\u0006\u0014\nU\u001d\u0012\u0011\u0014\u0006Z\u000e@\n\u0017\u000b\u0013W\u001bQ;;\u0012\u0006V";
      int var4 = "\u001a\u0003\u0002_\u001fWX\u0011\t\u000e\u0014\u0016\u0012*\u0017\u0005\u000b\u0014\u001f]*\u0017\u0014\rZ\u0016\n?\u0001\u0015\u0006I\u000eL1\u001c\u0015L\\\u001bQ;\u0005\u0007\u001aV\u001bK?\u0015\u0003\u000e^\u0014Qq\u0001\u0003\u0011M\u001fWq\u0000\u0003\u0010OUW;\u0001\t\u0016I\u0019@q \u0003\u0010O?K*\u001b\u0012\u001ai\u001fV1\u0007\u0014\u0000^\u0006\u0015\u0003\u0017n\bI\u0006\u0015\u0003\u0017n\bI*2(\fO4P2\u001eF\u000e^\u000eM1\u0016FFHT\u0000-R\u000b\u0016H\u000e\u00050\u001d\u0012CI\u001fQ+\u0000\bCU\u000fI2\u000f\u0015\u0003\u0017i\u001fV1\u0007\u0014\u0000^.\\.\u0017X\u0011\t\u000e\u0014\u0016\u0012*\u0017\u0005\u000b\u0014\u001f]*\u0017\u0014\rZ\u0016\n?\u0001\u0015\u0006I\u000eL1\u001c\u0015L\\\u001bQ;\u0005\u0007\u001aV\u001bK?\u0015\u0003\u000e^\u0014Qq\u0001\u0003\u0011M\u001fWq\u0000\u0003\u0010OUW;\u0001\t\u0016I\u0019@q \u0003\u0010O?K*\u001b\u0012\u001ai\u001fV1\u0007\u0014\u0000^\b\u0000\u0003\u0010T\u000fW=\u0017\u0007\u0015\u0003\u0017w\u0013K5\b\u0006\u0003\u000eK\u0016D*\u001721\u0007\rU\u0015Q~\u0015\u0003\u0017\u001b\u000fW2R\u0000\fIZD~\u001c\t\r\u001b\u0017D0\u0013\u0001\u0006_ZJ<\u0018\u0003\u0000OZW;\u0001\t\u0016I\u0019@dR\f\u0015\u0003\u0017n\bI\r\u0006\u0014\nU\u001d\u0004CHS\u0014\u0002\u001b\u0002\u0007\u0015\u0003\u0017w\u0013K5\u0012\u0007\u0014\u000fz\u0019F;\u0001\u0015\nY\u0016@\u001d\u001e\u0007\u0010H\b\u0006\u0003\u000eK\u0016D*\u0017\f\u0015\u0003\u0017n\bI\r\u0006\u0014\nU\u001d\u0012\u0011\u0014\u0006Z\u000e@\n\u0017\u000b\u0013W\u001bQ;;\u0012\u0006V"
         .length();
      char var1 = 6;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 85;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = a(var10000, c(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     d = var5;
                     RestEntityResource_version_URI = d[12];
                     return;
                  }

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

                  var2 = "I_K5C\u0015cZ_[+O\u0017i]>oHX\u0012K\u001clZ\u001aY\bTYB`UK)S\u0015n\u000eJ^\u0015G\u0014gZ_MG\u0001\\q\t\u001aP\u0001\u0006\\q\u0000\u001fLGK\fqZ\u001aQ\bRY`K\u001aQ\u0012J\u0015";
                  var4 = "I_K5C\u0015cZ_[+O\u0017i]>oHX\u0012K\u001clZ\u001aY\bTYB`UK)S\u0015n\u000eJ^\u0015G\u0014gZ_MG\u0001\\q\t\u001aP\u0001\u0006\\q\u0000\u001fLGK\fqZ\u001aQ\bRY`K\u001aQ\u0012J\u0015"
                     .length();
                  var1 = 15;
                  var7 = -1;
            }

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

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

      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 -> 39;
            case 1 -> 51;
            case 2 -> 54;
            case 3 -> 110;
            case 4 -> 47;
            case 5 -> 112;
            default -> 11;
         });
      }

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