package com.l7tech.policy.assertion;

import com.l7tech.objectmodel.ExternalEntityHeader;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.policy.assertion.annotation.Base64Value;
import com.l7tech.policy.variable.DataType;
import com.l7tech.policy.variable.VariableMetadata;
import com.l7tech.policy.variable.VariableNotSettableException;
import com.l7tech.util.Charsets;
import com.l7tech.util.HexUtils;
import org.jetbrains.annotations.Nullable;

public class SetVariableAssertion extends Assertion implements SetsVariables, UsesVariables {
   private String _variableToSet;
   private DataType _dataType = DataType.STRING;
   private String _base64Expression;
   private LineBreak _lineBreak = LineBreak.CRLF;
   private String _contentType;
   private String dateFormat;
   private int dateOffsetField = SetVariableAssertion.CalendarFields.SECONDS.getCalendarField();
   private String dateOffsetExpression;
   private transient VariableMetadata _meta;
   private transient String expressionString;
   private static final String baseName;
   private static final int MAX_DISPLAY_LENGTH = 60;
   static final AssertionNodeNameFactory policyNameFactory;
   static final long serialVersionUID = 8472268425977859820L;
   private static final String[] b;

   public SetVariableAssertion() {
   }

   public SetVariableAssertion(String var1, String var2) {
      this._variableToSet = var1;
      this.setDataType(DataType.STRING);
      this.setExpression(var2);
   }

   public String getVariableToSet() {
      return this._variableToSet;
   }

   public void setVariableToSet(String param1) throws VariableNotSettableException {
      // $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: invokestatic com/l7tech/policy/variable/BuiltinVariables.getMetadata (Ljava/lang/String;)Lcom/l7tech/policy/variable/VariableMetadata;
      // 04: astore 2
      // 05: aload 2
      // 06: ifnull 2c
      // 09: aload 2
      // 0a: invokevirtual com/l7tech/policy/variable/VariableMetadata.isSettable ()Z
      // 0d: ifne 24
      // 10: goto 17
      // 13: invokestatic com/l7tech/policy/assertion/SetVariableAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 16: athrow
      // 17: new com/l7tech/policy/variable/VariableNotSettableException
      // 1a: dup
      // 1b: aload 1
      // 1c: invokespecial com/l7tech/policy/variable/VariableNotSettableException.<init> (Ljava/lang/String;)V
      // 1f: athrow
      // 20: invokestatic com/l7tech/policy/assertion/SetVariableAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 23: athrow
      // 24: aload 0
      // 25: aload 2
      // 26: invokevirtual com/l7tech/policy/variable/VariableMetadata.getType ()Lcom/l7tech/policy/variable/DataType;
      // 29: putfield com/l7tech/policy/assertion/SetVariableAssertion._dataType Lcom/l7tech/policy/variable/DataType;
      // 2c: aload 0
      // 2d: aload 1
      // 2e: putfield com/l7tech/policy/assertion/SetVariableAssertion._variableToSet Ljava/lang/String;
      // 31: aload 0
      // 32: aconst_null
      // 33: putfield com/l7tech/policy/assertion/SetVariableAssertion._meta Lcom/l7tech/policy/variable/VariableMetadata;
      // 36: return
      // try (3 -> 8): 9 com/l7tech/policy/variable/VariableNotSettableException
      // try (5 -> 16): 16 com/l7tech/policy/variable/VariableNotSettableException
   }

   public DataType getDataType() {
      return this._dataType;
   }

   public void setDataType(DataType 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 0
      // 01: getfield com/l7tech/policy/assertion/SetVariableAssertion._variableToSet Ljava/lang/String;
      // 04: ifnull 32
      // 07: aload 0
      // 08: getfield com/l7tech/policy/assertion/SetVariableAssertion._variableToSet Ljava/lang/String;
      // 0b: invokestatic com/l7tech/policy/variable/BuiltinVariables.getMetadata (Ljava/lang/String;)Lcom/l7tech/policy/variable/VariableMetadata;
      // 0e: astore 2
      // 0f: aload 2
      // 10: ifnull 32
      // 13: aload 2
      // 14: invokevirtual com/l7tech/policy/variable/VariableMetadata.getType ()Lcom/l7tech/policy/variable/DataType;
      // 17: aload 1
      // 18: if_acmpeq 32
      // 1b: goto 22
      // 1e: invokestatic com/l7tech/policy/assertion/SetVariableAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 21: athrow
      // 22: new com/l7tech/policy/variable/VariableDataTypeNotChangeableException
      // 25: dup
      // 26: aload 0
      // 27: getfield com/l7tech/policy/assertion/SetVariableAssertion._variableToSet Ljava/lang/String;
      // 2a: invokespecial com/l7tech/policy/variable/VariableDataTypeNotChangeableException.<init> (Ljava/lang/String;)V
      // 2d: athrow
      // 2e: invokestatic com/l7tech/policy/assertion/SetVariableAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 31: athrow
      // 32: aload 0
      // 33: aload 1
      // 34: putfield com/l7tech/policy/assertion/SetVariableAssertion._dataType Lcom/l7tech/policy/variable/DataType;
      // 37: aload 0
      // 38: aconst_null
      // 39: putfield com/l7tech/policy/assertion/SetVariableAssertion._meta Lcom/l7tech/policy/variable/VariableMetadata;
      // 3c: return
      // try (7 -> 13): 14 com/l7tech/policy/variable/VariableNotSettableException
      // try (9 -> 22): 22 com/l7tech/policy/variable/VariableNotSettableException
   }

   public void setContentType(String var1) {
      this._contentType = var1;
   }

   public String getContentType() {
      return this._contentType;
   }

   @Base64Value(decodeMethodName = "expression")
   public String getBase64Expression() {
      return this._base64Expression;
   }

   public void setBase64Expression(String var1) {
      this.expressionString = null;
      this._base64Expression = var1;
   }

   public String expression() {
      try {
         if (this.expressionString != null) {
            return this.expressionString;
         }
      } catch (Exception var3) {
         throw a(var3);
      }

      try {
         return this.expressionString = new String(HexUtils.decodeBase64(this._base64Expression, true), Charsets.UTF8);
      } catch (Exception var2) {
         return this._base64Expression;
      }
   }

   public void setExpression(String var1) {
      this.setBase64Expression(HexUtils.encodeBase64(HexUtils.encodeUtf8(var1), true));
   }

   public LineBreak getLineBreak() {
      return this._lineBreak;
   }

   public void setLineBreak(LineBreak var1) {
      this._lineBreak = var1;
   }

   public String getDateFormat() {
      return this.dateFormat;
   }

   public void setDateFormat(@Nullable String var1) {
      this.dateFormat = var1;
   }

   public int getDateOffsetField() {
      return this.dateOffsetField;
   }

   public void setDateOffsetField(int var1) {
      this.dateOffsetField = var1;
   }

   public String getDateOffsetExpression() {
      return this.dateOffsetExpression;
   }

   public void setDateOffsetExpression(@Nullable String var1) {
      this.dateOffsetExpression = var1;
   }

   @Override
   public VariableMetadata[] getVariablesSet() {
      try {
         if (this._variableToSet == null) {
            return new VariableMetadata[0];
         }
      } catch (VariableNotSettableException var1) {
         throw a(var1);
      }

      return new VariableMetadata[]{this.getMetadata()};
   }

   @Migration(
      mapName = MigrationMappingSelection.NONE,
      mapValue = MigrationMappingSelection.REQUIRED,
      export = false,
      valueType = ExternalEntityHeader.ValueType.TEXT_ARRAY,
      resolver = PropertyResolver.Type.SERVER_VARIABLE
   )
   @Override
   public String[] getVariablesUsed() {
      return VariableUseSupport.expressions(this.expression(), this.getDateFormat(), this.getDateOffsetExpression()).asArray();
   }

   private VariableMetadata getMetadata() {
      // $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 0
      // 01: getfield com/l7tech/policy/assertion/SetVariableAssertion._meta Lcom/l7tech/policy/variable/VariableMetadata;
      // 04: ifnonnull 3e
      // 07: aload 0
      // 08: aload 0
      // 09: getfield com/l7tech/policy/assertion/SetVariableAssertion._variableToSet Ljava/lang/String;
      // 0c: invokestatic com/l7tech/policy/variable/BuiltinVariables.getMetadata (Ljava/lang/String;)Lcom/l7tech/policy/variable/VariableMetadata;
      // 0f: putfield com/l7tech/policy/assertion/SetVariableAssertion._meta Lcom/l7tech/policy/variable/VariableMetadata;
      // 12: aload 0
      // 13: getfield com/l7tech/policy/assertion/SetVariableAssertion._meta Lcom/l7tech/policy/variable/VariableMetadata;
      // 16: ifnonnull 3e
      // 19: goto 20
      // 1c: invokestatic com/l7tech/policy/assertion/SetVariableAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1f: athrow
      // 20: aload 0
      // 21: new com/l7tech/policy/variable/VariableMetadata
      // 24: dup
      // 25: aload 0
      // 26: getfield com/l7tech/policy/assertion/SetVariableAssertion._variableToSet Ljava/lang/String;
      // 29: bipush 0
      // 2a: bipush 0
      // 2b: aconst_null
      // 2c: bipush 1
      // 2d: aload 0
      // 2e: getfield com/l7tech/policy/assertion/SetVariableAssertion._dataType Lcom/l7tech/policy/variable/DataType;
      // 31: invokespecial com/l7tech/policy/variable/VariableMetadata.<init> (Ljava/lang/String;ZZLjava/lang/String;ZLcom/l7tech/policy/variable/DataType;)V
      // 34: putfield com/l7tech/policy/assertion/SetVariableAssertion._meta Lcom/l7tech/policy/variable/VariableMetadata;
      // 37: goto 3e
      // 3a: invokestatic com/l7tech/policy/assertion/SetVariableAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3d: athrow
      // 3e: aload 0
      // 3f: getfield com/l7tech/policy/assertion/SetVariableAssertion._meta Lcom/l7tech/policy/variable/VariableMetadata;
      // 42: areturn
      // try (0 -> 11): 12 com/l7tech/policy/variable/VariableNotSettableException
      // try (3 -> 27): 28 com/l7tech/policy/variable/VariableNotSettableException
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = this.defaultMeta();
      String[] var2 = b;
      var1.put(var2[9], new String[]{var2[3]});
      var1.put(var2[8], var2[0]);
      var1.put(var2[5], var2[4]);
      var1.put(var2[7], var2[15]);
      var1.put(var2[2], policyNameFactory);
      var1.put(var2[1], var2[12]);
      var1.put(var2[14], var2[6]);
      var1.put(var2[17], var2[16]);
      var1.put(var2[10], var2[13]);
      return var1;
   }

   static {
      String[] var5 = new String[18];
      int var3 = 0;
      String var2 = "\u0005d4\u0012fp2\"d8F\u0005I=$h!PIz\u0019&s/B@m(?d3sFk59o\u0003^Dl/8`-W\u0015&n,[Ff\u00129e%|Dr9\u0010`#FJm%\u000b&n,[Ff\u00109f)Q \u0015s%SQz|5t3FJr|5n.F@g(vw!@L~>:d3\u001c\u000b2d3QWv,\"h/\\\u001b\u0015n.F@g(vW!@L~>:d`bWp,3s4[@l\u000f&`,WQk9\u0018n$Wl|38\t%i/@QQ=;d\u000e&`,WQk9\u0010n,V@m/\u0018&n,[Ff\n7m)VDk3$B,SVl27l%\u0014\u0005d4\u0012fp2\"d8F\u0005I=$h!PIz>5n-\u001cI((3b(\u001cFp2%n,W\u000b~?\"h/\\\u000bL9\"W!@L~>:d\u0001AVz.\"h/\\um3&d2FLz/\u0017b4[Jq95n-\u001cI((3b(\u001cUp0?b9\u001cS~0?e!FJmr\u0005d4dDm57c,Wdl/3s4[Jq\n7m)VDk3$\u0014&s/B@m(?d3sFk59o\u000eSHz(5n-\u001dI((3b(\u001dFp2%n,W\nm9%n5@Fz/yb(WFtm`/'[C";
      int var4 = "\u0005d4\u0012fp2\"d8F\u0005I=$h!PIz\u0019&s/B@m(?d3sFk59o\u0003^Dl/8`-W\u0015&n,[Ff\u00129e%|Dr9\u0010`#FJm%\u000b&n,[Ff\u00109f)Q \u0015s%SQz|5t3FJr|5n.F@g(vw!@L~>:d3\u001c\u000b2d3QWv,\"h/\\\u001b\u0015n.F@g(vW!@L~>:d`bWp,3s4[@l\u000f&`,WQk9\u0018n$Wl|38\t%i/@QQ=;d\u000e&`,WQk9\u0010n,V@m/\u0018&n,[Ff\n7m)VDk3$B,SVl27l%\u0014\u0005d4\u0012fp2\"d8F\u0005I=$h!PIz>5n-\u001cI((3b(\u001cFp2%n,W\u000b~?\"h/\\\u000bL9\"W!@L~>:d\u0001AVz.\"h/\\um3&d2FLz/\u0017b4[Jq95n-\u001cI((3b(\u001cUp0?b9\u001cS~0?e!FJmr\u0005d4dDm57c,Wdl/3s4[Jq\n7m)VDk3$\u0014&s/B@m(?d3sFk59o\u000eSHz(5n-\u001dI((3b(\u001dFp2%n,W\nm9%n5@Fz/yb(WFtm`/'[C"
         .length();
      char var1 = 20;
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     baseName = b[11];
                     policyNameFactory = new bk();
                     return;
                  }

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

                  var2 = "8c \u0010D%%>o%\u0010K}?(c!Z\u0007`4(c8MKw\"tM/P]f`m\"*VN\u0014+~\"OM`%2i>~Kf84b\u0004\\G|";
                  var4 = "8c \u0010D%%>o%\u0010K}?(c!Z\u0007`4(c8MKw\"tM/P]f`m\"*VN\u0014+~\"OM`%2i>~Kf84b\u0004\\G|".length();
                  var1 = '(';
                  var7 = -1;
            }

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

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

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

      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 -> 74;
            case 1 -> 29;
            case 2 -> 92;
            case 3 -> 46;
            case 4 -> 57;
            case 5 -> 3;
            default -> 64;
         });
      }

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

   public enum CalendarFields {
      MILLISECONDS,
      SECONDS,
      MINUTES,
      HOURS,
      DAYS,
      WEEKS,
      MONTHS;

      private final int calendarField;
      private final String displayName;
      private static final String[] a;

      CalendarFields(int var3, String var4) {
         this.calendarField = var3;
         this.displayName = var4;
      }

      public int getCalendarField() {
         return this.calendarField;
      }

      public String getDisplayName() {
         return this.displayName;
      }

      public static SetVariableAssertion.CalendarFields getCalendarField(int var0) {
         SetVariableAssertion.CalendarFields[] var1 = values();

         for (SetVariableAssertion.CalendarFields var5 : var1) {
            try {
               if (var5.getCalendarField() == var0) {
                  return var5;
               }
            } catch (IllegalArgumentException var6) {
               throw a(var6);
            }
         }

         throw new IllegalArgumentException(a[2] + var0);
      }

      // $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[] var5 = new String[15];
         int var3 = 0;
         String var2 = "8\u0014\u0006#y\u000584&\u0003Y\u0019%\u0015\u0018?e\u0016\u001fP\u0018\u0012=o\u000f\u0015\u0011\tS7c\u0004\u001d\u0014[Iq\u0006=4=\u0005B2\u0005'>6\u001aY\u00044:*\u0002\u0007=2=\u0004^$\"\u0007=\u0012\u001d$~\u0004\u0002\f=\u0012\u001f=c\u0012\u0014\u0013\u0014\u001d5y\u0006=\u0014\u001d%b\u0012\u0007#\u001e\u0010>d\u0005\u0002\u00044\u001a\n\"\u0005'\u001e\u0016:y";
         int var4 = "8\u0014\u0006#y\u000584&\u0003Y\u0019%\u0015\u0018?e\u0016\u001fP\u0018\u0012=o\u000f\u0015\u0011\tS7c\u0004\u001d\u0014[Iq\u0006=4=\u0005B2\u0005'>6\u001aY\u00044:*\u0002\u0007=2=\u0004^$\"\u0007=\u0012\u001d$~\u0004\u0002\f=\u0012\u001f=c\u0012\u0014\u0013\u0014\u001d5y\u0006=\u0014\u001d%b\u0012\u0007#\u001e\u0010>d\u0005\u0002\u00044\u001a\n\"\u0005'\u001e\u0016:y"
            .length();
         char var1 = 5;
         int var7 = -1;

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

            while (true) {
               String var9 = a(var10000, a(var10001));
               switch (var10002) {
                  case 0:
                     var5[var3++] = var9;
                     if ((var7 += var1) >= var4) {
                        a = var5;
                        String[] var8 = a;
                        MILLISECONDS = new SetVariableAssertion.CalendarFields(14, var8[8]);
                        SECONDS = new SetVariableAssertion.CalendarFields(13, var8[10]);
                        MINUTES = new SetVariableAssertion.CalendarFields(12, var8[7]);
                        HOURS = new SetVariableAssertion.CalendarFields(11, var8[0]);
                        DAYS = new SetVariableAssertion.CalendarFields(5, var8[11]);
                        WEEKS = new SetVariableAssertion.CalendarFields(3, var8[12]);
                        MONTHS = new SetVariableAssertion.CalendarFields(2, var8[9]);
                        return;
                     }

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

                     var2 = "\u0001\u000e\u0003!\u007f\u000e\b\u000f\b\u0001)e\u0007\u001f\u0002\f\"x\u0019\u001e";
                     var4 = "\u0001\u000e\u0003!\u007f\u000e\b\u000f\b\u0001)e\u0007\u001f\u0002\f\"x\u0019\u001e".length();
                     var1 = '\f';
                     var7 = -1;
               }

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

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

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

         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 -> 49;
               case 1 -> 58;
               case 2 -> 50;
               case 3 -> 16;
               case 4 -> 75;
               case 5 -> 32;
               default -> 48;
            });
         }

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