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

import com.l7tech.gateway.api.AccessibleObject;
import com.l7tech.objectmodel.EntityType;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface ResourceFactory<R, E> {
   EntityType getType();

   boolean isReadOnly();

   boolean isCreateSupported();

   boolean isUpdateSupported();

   boolean isDeleteSupported();

   Set<String> getSelectors();

   Map<String, String> createResource(Object var1) throws ResourceFactory.InvalidResourceException;

   Map<String, String> createResource(String var1, Object var2) throws ResourceFactory.InvalidResourceException;

   R getResource(Map<String, String> var1) throws ResourceFactory.ResourceNotFoundException;

   R putResource(Map<String, String> var1, Object var2) throws ResourceFactory.ResourceNotFoundException, ResourceFactory.InvalidResourceException;

   String deleteResource(Map<String, String> var1) throws ResourceFactory.ResourceNotFoundException;

   Collection<Map<String, String>> getResources();

   List<R> getResources(String var1, Boolean var2, Map<String, List<Object>> var3);

   boolean resourceExists(Map<String, String> var1);

   R asResource(E var1);

   E fromResource(Object var1, boolean var2) throws ResourceFactory.InvalidResourceException;

   R identify(R var1, E var2);

   class DuplicateResourceAccessException extends RuntimeException {
      static final long serialVersionUID = 7475901618862710539L;

      public DuplicateResourceAccessException(String var1) {
         super(var1);
      }
   }

   class InvalidResourceException extends ResourceFactory.ResourceFactoryException {
      private final ResourceFactory.InvalidResourceException.ExceptionType type;
      private final String detail;
      static final long serialVersionUID = -3519335715266991889L;
      private static final String[] a;

      public InvalidResourceException(ResourceFactory.InvalidResourceException.ExceptionType var1, String var2) {
         String var10001 = var1.toString();
         String[] var3 = a;
         super(var3[1] + var10001 + var3[0] + var2);
         this.type = var1;
         this.detail = var2;
      }

      public ResourceFactory.InvalidResourceException.ExceptionType getType() {
         return this.type;
      }

      public String getDetail() {
         return this.detail;
      }

      static {
         String[] var5 = new String[2];
         int var3 = 0;
         String var2 = "o=#\u001ax\u0013\bi|(-=\u0016\u0006pg/)i\t\br.-)t\f\u0002x./=x@\u0013s.l";
         int var4 = "o=#\u001ax\u0013\bi|(-=\u0016\u0006pg/)i\t\br.-)t\f\u0002x./=x@\u0013s.l".length();
         char var1 = 2;
         int var0 = -1;

         while (true) {
            String var10002 = a(116, a(var2.substring(++var0, var0 + var1)));
            byte var10001 = -1;
            var5[var3++] = var10002;
            if ((var0 += var1) >= var4) {
               a = var5;
               return;
            }

            var1 = var2.charAt(var0);
         }
      }

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

         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 -> 60;
               case 1 -> 105;
               case 2 -> 20;
               case 3 -> 19;
               case 4 -> 104;
               case 5 -> 122;
               default -> 63;
            });
         }

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

      public enum ExceptionType {
         INVALID_VALUES,
         MISSING_VALUES,
         UNEXPECTED_TYPE;

         // $VF: Failed to inline enum fields
         // 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!)
         static {
            String[] var0 = new String[3];
            int var4 = 0;
            String var3 = "\u0007d@./PN\u0011|W#6\\Y\u000e\u0003cE<*WM\u0011|W#6\\Y\u000f\u001bdS73\\I\u001aoR07@Z\u000b";
            int var5 = "\u0007d@./PN\u0011|W#6\\Y\u000e\u0003cE<*WM\u0011|W#6\\Y\u000f\u001bdS73\\I\u001aoR07@Z\u000b".length();
            char var2 = 14;
            int var1 = -1;

            while (true) {
               String var10002 = a(48, a(var3.substring(++var1, var1 + var2)));
               byte var10001 = -1;
               var0[var4++] = var10002;
               if ((var1 += var2) >= var5) {
                  INVALID_VALUES = new ResourceFactory.InvalidResourceException.ExceptionType();
                  MISSING_VALUES = new ResourceFactory.InvalidResourceException.ExceptionType();
                  UNEXPECTED_TYPE = new ResourceFactory.InvalidResourceException.ExceptionType();
                  return;
               }

               var2 = var3.charAt(var1);
            }
         }

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

            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 -> 126;
                  case 1 -> 26;
                  case 2 -> 38;
                  case 3 -> 95;
                  case 4 -> 83;
                  case 5 -> 41;
                  default -> 58;
               });
            }

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

   class InvalidResourceSelectors extends ResourceFactory.ResourceNotFoundException {
      static final long serialVersionUID = -3017119556586362581L;
      private static final String a;

      public InvalidResourceSelectors() {
         super(a);
      }

      static {
         String var10002 = a(113, a("pLpbND`\u0019PcpMXvZG&pGAaZViqQ"));
         byte var10001 = -1;
         a = var10002;
      }

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

         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 -> 72;
               case 1 -> 83;
               case 2 -> 119;
               case 3 -> 114;
               case 4 -> 83;
               case 5 -> 92;
               default -> 117;
            });
         }

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

   class ResourceAccessException extends RuntimeException {
      static final long serialVersionUID = 1569471271504984982L;

      public ResourceAccessException(String var1, Throwable var2) {
         super(var1, var2);
      }

      public ResourceAccessException(String var1) {
         super(var1);
      }

      public ResourceAccessException(Throwable var1) {
         super(var1);
      }
   }

   class ResourceFactoryException extends Exception {
      static final long serialVersionUID = -586346556817138945L;

      public ResourceFactoryException(String var1) {
         super(var1);
      }

      public ResourceFactoryException(String var1, Throwable var2) {
         super(var1, var2);
      }
   }

   @Documented
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.METHOD)
   @interface ResourceMethod {
      String name();

      boolean selectors() default false;

      boolean resource() default false;
   }

   class ResourceNotFoundException extends ResourceFactory.ResourceFactoryException {
      static final long serialVersionUID = -412627969525428206L;

      public ResourceNotFoundException(String var1) {
         super(var1);
         ac.setNotFound();
      }

      public ResourceNotFoundException(String var1, Throwable var2) {
         super(var1, var2);
         ac.setNotFound();
      }
   }

   @Documented
   @Retention(RetentionPolicy.RUNTIME)
   @Target(ElementType.TYPE)
   @interface ResourceType {
      Class<? extends AccessibleObject> type();
   }
}
