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

import com.l7tech.external.assertions.gatewaymanagement.server.ResourceFactory;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.factories.impl.ServerModuleFileAPIResourceFactory;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.resource.ChoiceParam;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.resource.RestEntityResource;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.resource.RestEntityResourceUtils;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.resource.RestManVersion;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.resource.Since;
import com.l7tech.external.assertions.gatewaymanagement.server.rest.transformers.impl.ServerModuleFileTransformer;
import com.l7tech.gateway.api.Item;
import com.l7tech.gateway.api.ItemsList;
import com.l7tech.gateway.api.ManagedObjectFactory;
import com.l7tech.gateway.api.ServerModuleFileMO;
import com.l7tech.gateway.api.ServerModuleFileMO.ServerModuleFileModuleType;
import com.l7tech.gateway.common.module.ModuleDigest;
import com.l7tech.gateway.common.module.ServerModuleFile;
import com.l7tech.gateway.common.security.signer.SignerUtils;
import com.l7tech.gateway.rest.SpringBean;
import com.l7tech.util.Charsets;
import com.l7tech.util.CollectionUtils.MapBuilder;
import jakarta.inject.Singleton;
import jakarta.ws.rs.DELETE;
import jakarta.ws.rs.DefaultValue;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.PUT;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.ext.Provider;
import java.util.Collections;
import java.util.List;

@Provider
@Path("1.0/serverModuleFiles")
@Singleton
@Since(RestManVersion.VERSION_1_0_2)
public class ServerModuleFileResource extends RestEntityResource<ServerModuleFileMO, ServerModuleFileAPIResourceFactory, ServerModuleFileTransformer> {
   private static final byte[] a;
   private static final String b;
   protected static final String serverModuleFiles_URI;
   private static final String[] c;

   @SpringBean
   public void setFactory(ServerModuleFileAPIResourceFactory var1) {
      super.factory = (F)var1;
   }

   @SpringBean
   public void setTransformer(ServerModuleFileTransformer var1) {
      super.transformer = (T)var1;
   }

   @POST
   public Response upload(ServerModuleFileMO var1) throws ResourceFactory.ResourceNotFoundException, ResourceFactory.InvalidResourceException {
      return super.create(var1);
   }

   @PUT
   @Path("{id}")
   public Response createOrUpdate(ServerModuleFileMO var1, @PathParam("id") String var2) throws ResourceFactory.ResourceFactoryException {
      boolean var3 = this.factory.resourceExists(var2);

      try {
         if (var3) {
            throw new ResourceFactory.DuplicateResourceAccessException(c[13]);
         }
      } catch (ResourceFactory.ResourceFactoryException var4) {
         throw b(var4);
      }

      this.factory.createResource(var2, var1);
      return RestEntityResourceUtils.createCreateOrUpdatedResponseItem(var1, this.transformer, this, true);
   }

   @GET
   @Path("{id}")
   public Item<ServerModuleFileMO> get(@PathParam("id") String var1, @QueryParam("includeData") @DefaultValue("false") Boolean var2) throws ResourceFactory.ResourceNotFoundException {
      ServerModuleFileAPIResourceFactory var10000;
      String var10001;
      boolean var10002;
      label16: {
         try {
            var10000 = this.factory;
            var10001 = var1;
            if (var2 != null) {
               var10002 = var2;
               break label16;
            }
         } catch (ResourceFactory.ResourceNotFoundException var4) {
            throw b(var4);
         }

         var10002 = false;
      }

      ServerModuleFileMO var3 = var10000.getResource(var10001, var10002);
      return RestEntityResourceUtils.createGetResponseItem(var3, this.transformer, this);
   }

   @GET
   public ItemsList<ServerModuleFileMO> list(
      @QueryParam("sort") @ChoiceParam({"id", "name", "type"}) String param1,
      @QueryParam("order") @ChoiceParam({"asc", "desc"}) String param2,
      @QueryParam("name") List<String> param3,
      @QueryParam("type") @ChoiceParam(value = {"Custom", "Modular"}, caseSensitive = false) List<String> param4,
      @QueryParam("includeData") @DefaultValue("false") Boolean param5
   ) {
      // $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: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/ParameterValidationUtils.convertSortOrder (Ljava/lang/String;)Ljava/lang/Boolean;
      // 04: astore 6
      // 06: aload 0
      // 07: getfield com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.uriInfo Ljakarta/ws/rs/core/UriInfo;
      // 0a: invokeinterface jakarta/ws/rs/core/UriInfo.getQueryParameters ()Ljakarta/ws/rs/core/MultivaluedMap; 1
      // 0f: bipush 3
      // 10: anewarray 236
      // 13: dup
      // 14: bipush 0
      // 15: getstatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.c [Ljava/lang/String;
      // 18: astore 8
      // 1a: aload 8
      // 1c: bipush 14
      // 1e: aaload
      // 1f: aastore
      // 20: dup
      // 21: bipush 1
      // 22: aload 8
      // 24: bipush 4
      // 25: aaload
      // 26: aastore
      // 27: dup
      // 28: bipush 2
      // 29: aload 8
      // 2b: bipush 10
      // 2d: aaload
      // 2e: aastore
      // 2f: invokestatic java/util/Arrays.asList ([Ljava/lang/Object;)Ljava/util/List;
      // 32: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/ParameterValidationUtils.validateNoOtherQueryParamsIncludeDefaults (Ljakarta/ws/rs/core/MultivaluedMap;Ljava/util/List;)V
      // 35: invokestatic com/l7tech/util/CollectionUtils$MapBuilder.builder ()Lcom/l7tech/util/CollectionUtils$MapBuilder;
      // 38: astore 7
      // 3a: aload 3
      // 3b: ifnull 62
      // 3e: aload 3
      // 3f: invokeinterface java/util/List.isEmpty ()Z 1
      // 44: ifne 62
      // 47: goto 4e
      // 4a: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4d: athrow
      // 4e: aload 7
      // 50: getstatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.c [Ljava/lang/String;
      // 53: bipush 11
      // 55: aaload
      // 56: aload 3
      // 57: invokevirtual com/l7tech/util/CollectionUtils$MapBuilder.put (Ljava/lang/Object;Ljava/lang/Object;)Lcom/l7tech/util/CollectionUtils$MapBuilder;
      // 5a: pop
      // 5b: goto 62
      // 5e: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 61: athrow
      // 62: aload 4
      // 64: ifnull 97
      // 67: aload 4
      // 69: invokeinterface java/util/List.isEmpty ()Z 1
      // 6e: ifne 97
      // 71: goto 78
      // 74: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 77: athrow
      // 78: aload 7
      // 7a: getstatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.c [Ljava/lang/String;
      // 7d: bipush 1
      // 7e: aaload
      // 7f: aload 4
      // 81: new com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/m
      // 84: dup
      // 85: aload 0
      // 86: invokespecial com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/m.<init> (Lcom/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource;)V
      // 89: invokestatic com/l7tech/util/Functions.map (Ljava/lang/Iterable;Lcom/l7tech/util/Functions$UnaryThrows;)Ljava/util/List;
      // 8c: invokevirtual com/l7tech/util/CollectionUtils$MapBuilder.put (Ljava/lang/Object;Ljava/lang/Object;)Lcom/l7tech/util/CollectionUtils$MapBuilder;
      // 8f: pop
      // 90: goto 97
      // 93: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 96: athrow
      // 97: getstatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.c [Ljava/lang/String;
      // 9a: astore 8
      // 9c: aload 8
      // 9e: bipush 9
      // a0: aaload
      // a1: aload 1
      // a2: invokestatic org/apache/commons/lang3/StringUtils.equalsIgnoreCase (Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z
      // a5: ifeq ae
      // a8: aload 8
      // aa: bipush 12
      // ac: aaload
      // ad: astore 1
      // ae: aload 0
      // af: getfield com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.factory Lcom/l7tech/external/assertions/gatewaymanagement/server/rest/factories/APIResourceFactory;
      // b2: checkcast com/l7tech/external/assertions/gatewaymanagement/server/rest/factories/impl/ServerModuleFileAPIResourceFactory
      // b5: aload 1
      // b6: aload 6
      // b8: aload 7
      // ba: invokevirtual com/l7tech/util/CollectionUtils$MapBuilder.map ()Ljava/util/Map;
      // bd: aload 5
      // bf: invokevirtual java/lang/Boolean.booleanValue ()Z
      // c2: invokevirtual com/l7tech/external/assertions/gatewaymanagement/server/rest/factories/impl/ServerModuleFileAPIResourceFactory.listResources (Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/Map;Z)Ljava/util/List;
      // c5: aload 0
      // c6: getfield com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.transformer Lcom/l7tech/external/assertions/gatewaymanagement/server/rest/transformers/APITransformer;
      // c9: aload 0
      // ca: aload 0
      // cb: getfield com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/impl/ServerModuleFileResource.uriInfo Ljakarta/ws/rs/core/UriInfo;
      // ce: invokeinterface jakarta/ws/rs/core/UriInfo.getRequestUri ()Ljava/net/URI; 1
      // d3: invokevirtual java/net/URI.toString ()Ljava/lang/String;
      // d6: invokestatic com/l7tech/external/assertions/gatewaymanagement/server/rest/resource/RestEntityResourceUtils.createItemsList (Ljava/util/List;Lcom/l7tech/external/assertions/gatewaymanagement/server/rest/transformers/APITransformer;Lcom/l7tech/external/assertions/gatewaymanagement/server/rest/resource/URLAccessible;Ljava/lang/String;)Lcom/l7tech/gateway/api/ItemsList;
      // d9: areturn
      // try (32 -> 37): 38 com/l7tech/external/assertions/gatewaymanagement/server/ResourceFactory$DuplicateResourceAccessException
      // try (34 -> 47): 48 com/l7tech/external/assertions/gatewaymanagement/server/ResourceFactory$DuplicateResourceAccessException
      // try (50 -> 55): 56 com/l7tech/external/assertions/gatewaymanagement/server/ResourceFactory$DuplicateResourceAccessException
      // try (52 -> 70): 71 com/l7tech/external/assertions/gatewaymanagement/server/ResourceFactory$DuplicateResourceAccessException
   }

   @DELETE
   @Path("{id}")
   @Override
   public void delete(@PathParam("id") String var1) throws ResourceFactory.ResourceNotFoundException {
      super.delete(var1);
   }

   @GET
   @Path("template")
   public Item<ServerModuleFileMO> template() {
      ServerModuleFileMO var1 = ManagedObjectFactory.createServerModuleFileMO();
      String[] var7 = c;
      var1.setName(var7[3]);
      var1.setModuleType(ServerModuleFileModuleType.MODULAR_ASSERTION);
      var1.setModuleSha256(b);
      var1.setModuleData(a);
      MapBuilder var2 = MapBuilder.builder();

      for (String var6 : SignerUtils.ALL_SIGNING_PROPERTIES) {
         var7 = c;
         var2.put(var6, var7[5]);
      }

      var1.setSignatureProperties(Collections.unmodifiableMap(var2.map()));
      MapBuilder var10001 = MapBuilder.builder();
      var7 = c;
      var1.setProperties(
         var10001.put(ServerModuleFile.PROP_SIZE, var7[2]).put(ServerModuleFile.PROP_ASSERTIONS, var7[7]).put(ServerModuleFile.PROP_FILE_NAME, var7[0]).map()
      );
      return super.createTemplateItem(var1);
   }

   static {
      String[] var5 = new String[15];
      int var3 = 0;
      String var2 = "\u000fF0j^>\u0003>Q7wp#^:B1\n6L'ks($\"S&\u0007o\u0012z*,zH\u0018\u000fF.ns,\u0004>p&li(\u0002\u0016L'ks(62O&\u0004/Z3{Ű\u0013s\buEf\u0012\r`\u0007T}9*#b JT\u0001>\b\bwQw\u000e[\u001ah\nNi?\u00193h\"{ht%\u0011E(U~\u007f\u0005oS\u001bDx=H\u0018n\u0017\\x;7\u0019a\u0006jV \u001a\u0002\u0016\nKm\u0004Vx[\u0007%\u0015\u007f\u0013\fk-i-9I:K\"O':2*\u0015-U+\u000e\u00075W\u000foZ54>l;HR\u001b1/a\u0019k-\u001d\t\u0017Jtoq\u0018 (T\f.mb*\u0010V'rI?\u001ebf-lv(8.\b)k9n\b\u001f\u0018Ih|\u0015;\u001fBp(f\u0019\u001e\u0015o\u00105U(F\u0019br}{\f\u0004.lzY]\u0014\u001a7\u0011-l-t\u0000\rT,(&,8\u0015S /p\u0003\u0019\u0001G;q*\u0005\u001d\u0015Q'lt\u0000\u0012\u000ep\u0016zO\u007f(/{e=g\tKQ[\ff/'\u00158q+LU\u0018G\u0010\u0017\u001ai(\u0002>)swdY=\u0011.\u0012/GV+!\u0011f\u0002pq\tG\u0019k\u0002Wy\u0003\u0005co$Y.#\u00068H\u0010d0\u007f4\u0002S&_& \u0000\ny\u0015t.\u0005:}\u0000;Z$G\u0002\u0012\u0013\u0013qZ'\u0006\u0012\u0010\f5r\u00053\b[\u0002Ne<&\u0016h\r_\\\u001c[\u001az\u0002f+\u0003\u0012\u0012D~#\u0011(F1hz?=4G6rz\u000b\u00197F0\u001d\u000fF0j^>\u0003>Q7wp#Aww&mk\f\u0003(F1jv\"\u001ei&9B0{?{D{F-}p)\u0015?\u0003.q{8\u001c>\u0003!gk(\u0003{D,{lm\u0018>Q&\u0004/Z3{\u000b2M rj)\u0015\u001fB7\u007f\u00045B.{\n6L'ks($\"S&";
      int var4 = "\u000fF0j^>\u0003>Q7wp#^:B1\n6L'ks($\"S&\u0007o\u0012z*,zH\u0018\u000fF.ns,\u0004>p&li(\u0002\u0016L'ks(62O&\u0004/Z3{Ű\u0013s\buEf\u0012\r`\u0007T}9*#b JT\u0001>\b\bwQw\u000e[\u001ah\nNi?\u00193h\"{ht%\u0011E(U~\u007f\u0005oS\u001bDx=H\u0018n\u0017\\x;7\u0019a\u0006jV \u001a\u0002\u0016\nKm\u0004Vx[\u0007%\u0015\u007f\u0013\fk-i-9I:K\"O':2*\u0015-U+\u000e\u00075W\u000foZ54>l;HR\u001b1/a\u0019k-\u001d\t\u0017Jtoq\u0018 (T\f.mb*\u0010V'rI?\u001ebf-lv(8.\b)k9n\b\u001f\u0018Ih|\u0015;\u001fBp(f\u0019\u001e\u0015o\u00105U(F\u0019br}{\f\u0004.lzY]\u0014\u001a7\u0011-l-t\u0000\rT,(&,8\u0015S /p\u0003\u0019\u0001G;q*\u0005\u001d\u0015Q'lt\u0000\u0012\u000ep\u0016zO\u007f(/{e=g\tKQ[\ff/'\u00158q+LU\u0018G\u0010\u0017\u001ai(\u0002>)swdY=\u0011.\u0012/GV+!\u0011f\u0002pq\tG\u0019k\u0002Wy\u0003\u0005co$Y.#\u00068H\u0010d0\u007f4\u0002S&_& \u0000\ny\u0015t.\u0005:}\u0000;Z$G\u0002\u0012\u0013\u0013qZ'\u0006\u0012\u0010\f5r\u00053\b[\u0002Ne<&\u0016h\r_\\\u001c[\u001az\u0002f+\u0003\u0012\u0012D~#\u0011(F1hz?=4G6rz\u000b\u00197F0\u001d\u000fF0j^>\u0003>Q7wp#Aww&mk\f\u0003(F1jv\"\u001ei&9B0{?{D{F-}p)\u0015?\u0003.q{8\u001c>\u0003!gk(\u0003{D,{lm\u0018>Q&\u0004/Z3{\u000b2M rj)\u0015\u001fB7\u007f\u00045B.{\n6L'ks($\"S&"
         .length();
      char var1 = 17;
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     c = var5;
                     serverModuleFiles_URI = c[6];
                     a = c[8].getBytes(Charsets.UTF8);
                     b = ModuleDigest.hexEncodedDigest(a);
                     return;
                  }

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

                  var2 = "Y\u0017`9+nle\u0016g#+ZHf\u00172:>x@~\u00172!!h\u0001y\u0007b?!nUo\u0016\u0004d\u0013\u007f*";
                  var4 = "Y\u0017`9+nle\u0016g#+ZHf\u00172:>x@~\u00172!!h\u0001y\u0007b?!nUo\u0016\u0004d\u0013\u007f*".length();
                  var1 = '%';
                  var7 = -1;
            }

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

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

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

      return var10000;
   }

   private static String b(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 -> 69;
            case 2 -> 37;
            case 3 -> 120;
            case 4 -> 121;
            case 5 -> 43;
            default -> 22;
         });
      }

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

   public static class DisabledException extends ResourceFactory.ResourceAccessException {
      static final long serialVersionUID = 5679077694425585758L;
      private static final String a;

      public DisabledException() {
         super(a);
      }

      static {
         String var10002 = a(
            2,
            a(
               "PeH\ft\u001d6No^\u000f}\n6EiV\u001fbOpvnY\u000ex\u0000xblS\u000ehO~bs\u001a\u0018t\nx#dS\tp\rzfd\u0014ZE\u00006fn[\u0018}\n:#s_\u000e1\u001b~f Y\u0016d\u001cbfr\u001a\nc\u0000ffrN\u00031HefrL\u001fc\"yguV\u001fW\u0006zf.O\n}\u0000wg._\u0014p\rzf'\u001a\u000e~O1wrO\u001f6"
            )
         );
         byte var10001 = -1;
         a = var10002;
      }

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

         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 -> 1;
               case 1 -> 2;
               case 2 -> 56;
               case 3 -> 120;
               case 4 -> 19;
               case 5 -> 109;
               default -> 20;
            });
         }

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