package com.l7tech.gateway.common.security;

import com.l7tech.gateway.common.security.rbac.OperationType;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Target(ElementType.METHOD)
public @interface PrivateKeySecured {
   PrivateKeySecured.PreCheck[] preChecks();

   boolean allowNonFatalPreChecks() default false;

   OperationType argOp() default OperationType.NONE;

   int keystoreGoidArg() default 0;

   int keyAliasArg() default 1;

   int metadataArg() default -1;

   int keyEntryArg() default -1;

   PrivateKeySecured.ReturnCheck returnCheck() default PrivateKeySecured.ReturnCheck.CHECK_RETURN;

   enum PreCheck {
      NO_PRE_CHECK,
      CHECK_ARG_OPERATION,
      CHECK_ARG_EXPORT_KEY,
      CHECK_UPDATE_ALL_KEYSTORES_NONFATAL;

      // $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[4];
         int var4 = 0;
         String var3 = "K\b8k-eJZ\u0007\"m>jDZ\u0014\"c#c#K\b8k-e^X\u0004<|#eJD\f\"c#cX\\\u000f/m5eEG\u000e;i2{G";
         int var5 = "K\b8k-eJZ\u0007\"m>jDZ\u0014\"c#c#K\b8k-e^X\u0004<|#eJD\f\"c#cX\\\u000f/m5eEG\u000e;i2{G".length();
         char var2 = 20;
         int var7 = -1;

         label25:
         while (true) {
            byte var10000 = 89;
            String var10001 = var3.substring(++var7, var7 + var2);
            byte var10002 = -1;

            while (true) {
               String var8 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var0[var4++] = var8;
                     if ((var7 += var2) >= var5) {
                        NO_PRE_CHECK = new PrivateKeySecured.PreCheck();
                        CHECK_ARG_OPERATION = new PrivateKeySecured.PreCheck();
                        CHECK_ARG_EXPORT_KEY = new PrivateKeySecured.PreCheck();
                        CHECK_UPDATE_ALL_KEYSTORES_NONFATAL = new PrivateKeySecured.PreCheck();
                        return;
                     }

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

                     var3 = "z3\u001eD\bChw4\u0004W\u0011\u0013w4\u0004W\u0011Yvf;\u001e[\nCeu(\b[\u0014";
                     var5 = "z3\u001eD\bChw4\u0004W\u0011\u0013w4\u0004W\u0011Yvf;\u001e[\nCeu(\b[\u0014".length();
                     var2 = '\f';
                     var7 = -1;
               }

               var10000 = 101;
               var10001 = var3.substring(++var7, var7 + var2);
               var10002 = 0;
            }
         }
      }

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

         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 -> 81;
               case 1 -> 25;
               case 2 -> 36;
               case 3 -> 113;
               case 4 -> 63;
               case 5 -> 99;
               default -> 82;
            });
         }

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

   enum ReturnCheck {
      NO_RETURN_CHECK,
      CHECK_RETURN,
      FILTER_RETURN;

      // $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 = "@\u0013\ntW9~\\\u0012\neZ(hE\fM\u0014\u0010eY2yK\b\u0000t\\\rH\u0015\u0019rW?t\\\u0019\u0001s@#";
         int var5 = "@\u0013\ntW9~\\\u0012\neZ(hE\fM\u0014\u0010eY2yK\b\u0000t\\\rH\u0015\u0019rW?t\\\u0019\u0001s@#".length();
         char var2 = 15;
         int var1 = -1;

         while (true) {
            String var10002 = a(59, a(var3.substring(++var1, var1 + var2)));
            byte var10001 = -1;
            var0[var4++] = var10002;
            if ((var1 += var2) >= var5) {
               NO_RETURN_CHECK = new PrivateKeySecured.ReturnCheck();
               CHECK_RETURN = new PrivateKeySecured.ReturnCheck();
               FILTER_RETURN = new PrivateKeySecured.ReturnCheck();
               return;
            }

            var2 = var3.charAt(var1);
         }
      }

      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 -> 53;
               case 1 -> 103;
               case 2 -> 110;
               case 3 -> 29;
               case 4 -> 41;
               case 5 -> 86;
               default -> 16;
            });
         }

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