package com.l7tech.policy.code.serializer;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.l7tech.policy.assertion.composite.CompositeAssertion;
import com.l7tech.policy.code.config.AssertionTypeConfig;
import com.l7tech.policy.code.config.PolicyCodeConfig;
import java.io.IOException;

public class CompositeAssertionSerializer<T extends CompositeAssertion> extends BasicAssertionSerializer<T> {
   private static final String a;

   public CompositeAssertionSerializer(PolicyCodeConfig var1) {
      super(var1);
   }

   protected void serializeAssertion(T var1, AssertionTypeConfig var2, JsonGenerator var3, SerializerProvider var4) throws IOException {
      try {
         if (this.canSerializeAsPrimitive((T)var1, var2)) {
            var3.writeArrayFieldStart(this.getBaseName((T)var1));
            this.serializeChildAssertions(var1, var3);
            var3.writeEndArray();
            return;
         }
      } catch (IOException var5) {
         throw a(var5);
      }

      var3.writeObjectFieldStart(this.getBaseName((T)var1));
      this.serializeAssertionProperties((T)var1, var2, var3);
      var3.writeArrayFieldStart(a);
      this.serializeChildAssertions(var1, var3);
      var3.writeEndArray();
      var3.writeEndObject();
   }

   protected void serializeAssertionExtraProperties(T var1, AssertionTypeConfig var2, JsonGenerator var3) {
      FieldSerializer var4 = this.codeConfig.getFieldSerializer();
      var2.getOrderedFields().forEach(var4x -> var4.serialize(var1, var2, var4x, var3));
   }

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

   static {
      String var10002 = b(116, b("v.b \u001d/;L#"));
      byte var10001 = -1;
      a = var10002;
   }

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

      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 -> 93;
            case 1 -> 57;
            case 2 -> 126;
            case 3 -> 61;
            case 4 -> 5;
            case 5 -> 63;
            default -> 61;
         });
      }

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