package com.l7tech.external.assertions.gatewaygraphql.server.data;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.helper.PolicyCodeHelper;
import com.l7tech.policy.assertion.CustomAssertionHolder;
import com.l7tech.policy.assertion.ext.CustomAssertion;
import com.l7tech.policy.assertion.ext.targetable.CustomMessageTargetable;
import com.l7tech.policy.code.PolicyCodeModuleProvider;
import com.l7tech.policy.code.config.AssertionCategory;
import com.l7tech.policy.code.config.schema.JsonSchemaGenerator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class CustomAssertionMetadataDTO extends AssertionMetadataDTO {
   private static final String[] k;

   public CustomAssertionMetadataDTO(CustomAssertionHolder var1, PolicyCodeModuleProvider var2, PolicyCodeHelper var3) {
      super(var1, var2, var3);
   }

   @Override
   public String getConfigName() {
      return CustomAssertionHolder.EXTERNAL_NAME_PREFIX + this.getClassName();
   }

   @Override
   public String getClassName() {
      CustomAssertion var1 = this.b();
      return var1 != null ? var1.getClass().getName() : null;
   }

   @Override
   public AssertionMetadataDTO.AssertionType getAssertionType() {
      return AssertionMetadataDTO.AssertionType.CUSTOM;
   }

   @Override
   public List<AssertionCategory> getCategories() {
      Set var1 = ((CustomAssertionHolder)this.assertion).getCategories();
      return var1 != null
         ? var1.stream().<AssertionCategory>map(AssertionCategory::fromCategory).collect(Collectors.toSet()).stream().toList()
         : Collections.emptyList();
   }

   @Override
   public boolean isMessageTargetable() {
      return this.b() instanceof CustomMessageTargetable;
   }

   @Override
   public List<JsonNode> getConfigSchemas() {
      String var1 = this.getName();
      String var2 = this.getClassName();
      String var3 = this.policyCodeConfig.getJsonSchemaGenerator().getAssertionSchemaId(this.atConfig);
      String var4 = var3 + ":" + var2;
      ArrayList var5 = new ArrayList();
      super.getConfigSchemas().forEach(var1x -> var5.add(var1x.deepCopy()));
      String var6 = this.a(var5);
      String var7 = this.a();
      this.adjustSchemaObject(var5, var3, var4, var4x -> {
         String[] var7x = k;
         var4x.put(var7x[6], var1);
         if (var6 != null) {
            JsonNode var5x = var4x.remove(var7x[0]);
            ObjectNode var6x = var4x.withObject(var7x[0]);
            if (var7 != null) {
               var6x.withObject(var7x[8]).put(var7x[5], var7x[12]).put(var7x[11], var7);
            }

            if (var2 != null) {
               var7x = k;
               var6x.withObject(var7x[2]).put(var7x[7], var7x[13]).put(var7x[3], var2);
            }

            var7x = k;
            var6x.withObject(var7x[15]).put(var7x[10], var6);
            var5x.fields().forEachRemaining(var1xx -> {
               if (((String)var1xx.getKey()).startsWith("_")) {
                  var6x.putIfAbsent((String)var1xx.getKey(), (JsonNode)var1xx.getValue());
               }
            });
         }
      });
      this.adjustSchemaObject(var5, var3 + JsonSchemaGenerator.MAIN_SCHEMA_SUFFIX, var4 + JsonSchemaGenerator.MAIN_SCHEMA_SUFFIX, var2x -> {
         String[] var4x = k;
         var2x.put(var4x[1], var1);
         JsonNode var3x = var2x.get(var4x[9]).get(CustomAssertionHolder.EXTERNAL_NAME);
         if (var3x != null) {
            ((ObjectNode)var3x).put(var4x[4], var4);
         }
      });
      return var5;
   }

   @Override
   protected String getConfigNameInternal() {
      return CustomAssertionHolder.EXTERNAL_NAME_PREFIX + this.getClassName();
   }

   private String a(List<JsonNode> var1) {
      CustomAssertion var2 = this.b();
      if (var2 != null) {
         List var3 = this.policyCodeConfig.getJsonSchemaGenerator().generateSchemas(var2.getClass(), this.atConfig);
         if (!var3.isEmpty()) {
            var1.addAll(var3);
            return ((JsonNode)var3.getFirst()).get(k[14]).asText();
         }
      }

      return null;
   }

   private String a() {
      CustomAssertion var1 = this.b();
      return var1 != null ? var1.getName() : null;
   }

   private CustomAssertion b() {
      return ((CustomAssertionHolder)this.assertion).getCustomAssertion();
   }

   static {
      String[] var5 = new String[16];
      int var3 = 0;
      String var2 = "UF|dy]\u0001LQ`\u0005Q]gxy\nSU\u007fayl\u0019DG`\u0005F[}gh\u0004\u0001Fvr\u0004QMcq\u0005Q]gxy\u0004QMcq\u0004KU~q\nUF|dy]\u0001LQ`\u0004\u0001Fvr\u0005F[}gh\u0006V@a}rH\u0006V@a}rH";
      int var4 = "UF|dy]\u0001LQ`\u0005Q]gxy\nSU\u007fayl\u0019DG`\u0005F[}gh\u0004\u0001Fvr\u0004QMcq\u0005Q]gxy\u0004QMcq\u0004KU~q\nUF|dy]\u0001LQ`\u0004\u0001Fvr\u0005F[}gh\u0006V@a}rH\u0006V@a}rH"
         .length();
      char var1 = '\n';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 96;
         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) {
                     k = var5;
                     return;
                  }

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

                  var2 = "?cI\u0005mkA_G";
                  var4 = "?cI\u0005mkA_G".length();
                  var1 = 3;
                  var7 = -1;
            }

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

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

      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 -> 69;
            case 1 -> 84;
            case 2 -> 115;
            case 3 -> 116;
            case 4 -> 124;
            case 5 -> 79;
            default -> 21;
         });
      }

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