package com.l7tech.server.otel.util;

import com.l7tech.gateway.common.audit.Audit;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.otel.OtelBaggageChange;
import com.l7tech.server.otel.OtelTraceContextImpl;
import io.opentelemetry.api.baggage.Baggage;
import io.opentelemetry.api.baggage.BaggageBuilder;
import io.opentelemetry.api.baggage.BaggageEntry;
import io.opentelemetry.api.baggage.BaggageEntryMetadata;
import io.opentelemetry.api.trace.Span;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;

public class OtelBaggageUtil {
   private static final Logger a;
   private static final String[] b;

   public static void setBaggageContextVariable(PolicyEnforcementContext var0, Map<String, BaggageEntry> var1) {
      if (!var1.isEmpty()) {
         String[] var5 = b;
         var0.setVariable(var5[0], String.join(",", var1.keySet()));

         for (String var3 : var1.keySet()) {
            if (OtelTraceContextImpl.OTEL_BAGGAGE_KEYWORDS.contains(var3.toLowerCase())) {
               var5 = b;
               a.log(Level.FINE, var5[4].formatted(var3));
            } else {
               String var4 = getBaggageStringValue((BaggageEntry)var1.get(var3));
               var0.setVariable(b[3] + var3, var4);
            }
         }
      }
   }

   public static String getBaggageStringValue(BaggageEntry var0) {
      String var1 = var0.getValue();
      if (!var0.getMetadata().getValue().isBlank()) {
         var1 = var1 + ";" + var0.getMetadata().getValue();
      }

      return var1;
   }

   public static Baggage createBaggage(Map<String, BaggageEntry> var0, List<OtelBaggageChange> var1) {
      BaggageBuilder var2 = Baggage.builder();

      for (Entry var4 : var0.entrySet()) {
         var2.put((String)var4.getKey(), ((BaggageEntry)var4.getValue()).getValue(), ((BaggageEntry)var4.getValue()).getMetadata());
      }

      var1.forEach(var1x -> {
         switch (com.l7tech.server.otel.util.a.a[var1x.getChangeType().ordinal()]) {
            case 1:
               var2.remove(var1x.getBaggageKey());
               break;
            case 2:
               var2.put(var1x.getBaggageKey(), var1x.getBaggageValue(), BaggageEntryMetadata.create(var1x.getBaggageMetadataValue()));
         }
      });
      return var2.build();
   }

   public static void setBaggageSpanAttributes(Span var0, Map<String, BaggageEntry> var1, Set<String> var2, String var3) {
      var2.stream().filter(var0x -> !var0x.equalsIgnoreCase("*")).forEach(var2x -> var0.setAttribute(var3 + var2x, ""));
      var1.forEach((var3x, var4) -> {
         if (var2.contains("*") || var2.contains(var3x)) {
            String var5 = getBaggageStringValue(var4);
            var0.setAttribute(var3 + var3x, var5);
         }
      });
   }

   public static List<OtelBaggageChange> createBaggageChangeList(PolicyEnforcementContext var0, String var1, Audit var2) {
      StringBuilder var3 = new StringBuilder();
      ArrayList var4 = new ArrayList();
      String var5 = Pattern.quote("=");
      String var6 = Pattern.quote(",");
      String[] var7 = var1.split(var6);

      for (String var11 : var7) {
         String[] var12 = var11.split(var5, 2);
         if (var12.length == 2 && !var12[0].isBlank()) {
            String var13 = OtelContextUtil.getResolvedContextValue(var0, var12[1].trim(), var2);
            String[] var14 = var13.split(";", 2);
            if (var14.length == 2) {
               var4.add(new OtelBaggageChange(OtelBaggageChange.BaggageChangeType.UPDATE, var12[0].trim(), var14[0].trim(), var14[1].trim()));
            } else {
               var4.add(new OtelBaggageChange(OtelBaggageChange.BaggageChangeType.UPDATE, var12[0].trim(), var14[0].trim()));
            }
         } else {
            var3.append(var11).append(" ");
         }
      }

      if (!var3.isEmpty()) {
         Logger var10000 = a;
         Level var10001 = Level.FINE;
         String var10002 = String.valueOf(var3);
         String[] var15 = b;
         var10000.log(var10001, var15[2] + var10002 + var15[1] + var1);
      }

      return var4;
   }

   static {
      String[] var5 = new String[5];
      int var3 = 0;
      String var2 = "~[yG^{kvH}L\u00157atVo\"1isYPko`ZyX\u00047eeJp\u0005\u0012xmvN{N^lzuNhNJ9-XHrD\u0002|n1dyRPok}Zy\u000b\u0000xcc\\<O\u0005|*e@<\\\u0002vdv\u000fzD\u0002tke\u0015<";
      int var4 = "~[yG^{kvH}L\u00157atVo\"1isYPko`ZyX\u00047eeJp\u0005\u0012xmvN{N^lzuNhNJ9-XHrD\u0002|n1dyRPok}Zy\u000b\u0000xcc\\<O\u0005|*e@<\\\u0002vdv\u000fzD\u0002tke\u0015<"
         .length();
      char var1 = 17;
      int var7 = -1;

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

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     a = Logger.getLogger(OtelBaggageUtil.class.getName());
                     return;
                  }

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

                  var2 = "\u0006#\u0001?&\u0003\u0013\u000e0\u00054mOU\u001a<\r#x\b\u001c\u000ew\u0007!m\u0000\u0006\u00009\u0003sk\u000e\u001c\u001d2\u001c'(\u0017\u0013\u001b>\u00051d\u0004R\u000f8\u0016sj\u0000\u0015\u000e6\u00036(\n\u0017\u0010wA $A\u0006\u0001>\u0017sc\u0004\u000bI>\u0017siA\u0000\f$\u0001!~\u0004\u0016I<\u0001*\u007f\u000e\u0000\r";
                  var4 = "\u0006#\u0001?&\u0003\u0013\u000e0\u00054mOU\u001a<\r#x\b\u001c\u000ew\u0007!m\u0000\u0006\u00009\u0003sk\u000e\u001c\u001d2\u001c'(\u0017\u0013\u001b>\u00051d\u0004R\u000f8\u0016sj\u0000\u0015\u000e6\u00036(\n\u0017\u0010wA $A\u0006\u0001>\u0017sc\u0004\u000bI>\u0017siA\u0000\f$\u0001!~\u0004\u0016I<\u0001*\u007f\u000e\u0000\r"
                     .length();
                  var1 = '\r';
                  var7 = -1;
            }

            var10000 = 52;
            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] ^ 70);
      }

      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 -> 93;
            case 1 -> 99;
            case 2 -> 80;
            case 3 -> 103;
            case 4 -> 60;
            case 5 -> 85;
            default -> 70;
         });
      }

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