package com.l7tech.policy.assertion;

import com.l7tech.policy.assertion.annotation.Base64Value;
import com.l7tech.policy.assertion.xmlsec.SecurityHeaderAddressable;
import com.l7tech.policy.assertion.xmlsec.SecurityHeaderAddressableSupport;
import com.l7tech.policy.assertion.xmlsec.XmlSecurityRecipientContext;
import com.l7tech.util.BeanUtils;
import com.l7tech.util.Charsets;
import com.l7tech.util.HexUtils;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import javax.validation.constraints.NotNull;

public class AssertionUtils {
   private static final String[] a;

   public static String decorateName(Assertion var0, String var1) {
      return decorateName(var0, new StringBuilder(var1));
   }

   public static String decorateName(Assertion var0, StringBuilder var1) {
      StringBuilder var2 = new StringBuilder(var1);
      if (var0 instanceof MessageTargetable) {
         String var3 = ((MessageTargetable)var0).getTargetName();
         if (var3 != null) {
            String[] var4 = a;
            var2.insert(0, var3 + var4[5]);
         }
      }

      if (var0 instanceof SecurityHeaderAddressable) {
         var2.append(SecurityHeaderAddressableSupport.getActorSuffix(var0));
      }

      if (var0 instanceof PrivateKeyable && !((PrivateKeyable)var0).isUsesDefaultKeyStore()) {
         if (((PrivateKeyable)var0).isUsesDynamicPrivateKey()) {
            String[] var7 = a;
            var2.append(var7[2]).append(((PrivateKeyable)var0).getDynamicPrivateKeyVariable()).append(")");
         } else {
            String[] var8 = a;
            var2.append(var8[4]).append(((PrivateKeyable)var0).getKeyAlias()).append(")");
         }
      }

      if (var0 instanceof IdentityTagable) {
         String var5 = ((IdentityTagable)var0).getIdentityTag();
         if (var5 != null && !var5.isEmpty()) {
            String[] var9 = a;
            var2.append(var9[3]).append(var5).append("\"");
         }
      }

      if (var0 instanceof IdentityTargetable) {
         IdentityTarget var6 = ((IdentityTargetable)var0).getIdentityTarget();
         if (var6 != null && var6.getTargetIdentityType() != null) {
            var2.append(a[6]);
            var2.append(var6.describeIdentityForDisplay());
            var2.append("]");
         }
      }

      return var2.toString();
   }

   public static boolean isSameTargetMessage(Assertion var0, Assertion var1) {
      boolean var2 = false;
      if (Assertion.isRequest(var0) && Assertion.isRequest(var1)) {
         var2 = true;
      } else if (Assertion.isResponse(var0) && Assertion.isResponse(var1)) {
         var2 = true;
      } else if (var0 instanceof MessageTargetable && var1 instanceof MessageTargetable) {
         MessageTargetable var3 = (MessageTargetable)var0;
         MessageTargetable var4 = (MessageTargetable)var1;
         var2 = var3.getTarget() == var4.getTarget()
            && (
               var3.getTarget() != TargetMessageType.OTHER
                  || var3.getOtherTargetMessageVariable() != null
                     && var3.getOtherTargetMessageVariable().equalsIgnoreCase(var4.getOtherTargetMessageVariable())
            );
      }

      return var2;
   }

   public static boolean isSameTargetMessage(Assertion var0, MessageTargetable var1) {
      boolean var2 = false;
      if (Assertion.isRequest(var0) && var1.getTarget() == TargetMessageType.REQUEST) {
         var2 = true;
      } else if (Assertion.isResponse(var0) && var1.getTarget() == TargetMessageType.RESPONSE) {
         var2 = true;
      } else if (var0 instanceof MessageTargetable var3) {
         var2 = var3.getTarget() == var1.getTarget()
            && (
               var3.getTarget() != TargetMessageType.OTHER
                  || var3.getOtherTargetMessageVariable() != null
                     && var3.getOtherTargetMessageVariable().equalsIgnoreCase(var1.getOtherTargetMessageVariable())
            );
      }

      return var2;
   }

   public static boolean isSameTargetRecipient(Assertion var0, Assertion var1) {
      String var2 = a(var0);
      String var3 = a(var1);
      return var0 != null && var1 != null && var2.equals(var3);
   }

   public static String getTargetName(Assertion var0) {
      String var1 = null;
      if (var0 instanceof MessageTargetable) {
         var1 = ((MessageTargetable)var0).getTargetName();
      } else if (Assertion.isResponse(var0)) {
         String[] var2 = a;
         var1 = var2[0];
      }

      if (var1 == null) {
         var1 = a[1];
      }

      return var1;
   }

   @NotNull
   public static String getBase64EncodedPropsDecoded(Assertion var0) {
      StringBuilder var1 = new StringBuilder();

      for (PropertyDescriptor var4 : BeanUtils.getProperties(var0.getClass(), true, false)) {
         Method var5 = var4.getReadMethod();
         Base64Value var6 = var5.getAnnotation(Base64Value.class);
         if (var6 != null) {
            String var7 = null;
            if (!var6.decodeMethodName().trim().isEmpty()) {
               try {
                  Method var8 = var0.getClass().getDeclaredMethod(var6.decodeMethodName());
                  if (var8 != null) {
                     Object var9 = var8.invoke(var0);
                     if (var9 != null) {
                        var7 = var9.toString();
                     }
                  }
               } catch (Exception var10) {
               }
            }

            if (var7 == null) {
               try {
                  Object var13 = var5.invoke(var0);
                  if (var13 != null) {
                     var7 = new String(HexUtils.decodeBase64(var13.toString(), true), Charsets.UTF8);
                  }
               } catch (Exception var11) {
               }
            }

            try {
               if (var7 != null) {
                  var1.append(var7);
               }
            } catch (Exception var12) {
               throw a(var12);
            }
         }
      }

      return var1.toString();
   }

   private static String a(Assertion var0) {
      String var1 = "";
      if (var0 instanceof SecurityHeaderAddressable var2) {
         XmlSecurityRecipientContext var3 = var2.getRecipientContext();
         if (var3 != null && var3.getActor() != null) {
            var1 = var3.getActor();
         }
      }

      return var1;
   }

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

   static {
      String[] var5 = new String[7];
      int var3 = 0;
      String var2 = "\tB& @8+>\u0007\tB$%J%,\u0007{\u000f\u001e5Vlx\u0005{F&p\r\u0007{\u000f\u001e5Vlx";
      int var4 = "\tB& @8+>\u0007\tB$%J%,\u0007{\u000f\u001e5Vlx\u0005{F&p\r\u0007{\u000f\u001e5Vlx".length();
      char var1 = '\b';
      int var7 = -1;

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

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

                  var2 = "\u001a|\u0002\u0000\u0007";
                  var4 = "\u001a|\u0002\u0000\u0007".length();
                  var1 = 2;
                  var7 = -1;
            }

            var10000 = 54;
            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 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 -> 22;
            case 1 -> 106;
            case 2 -> 24;
            case 3 -> 29;
            case 4 -> 98;
            case 5 -> 27;
            default -> 21;
         });
      }

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