package com.l7tech.server.policy.assertion.composite;

import com.l7tech.gateway.common.LicenseException;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.assertion.JdbcConnectionable;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.policy.assertion.composite.CompositeAssertion;
import com.l7tech.policy.assertion.composite.TransactionAssertion;
import com.l7tech.server.jdbc.JdbcConnectionPoolManager;
import com.l7tech.server.message.PolicyEnforcementContext;
import jakarta.inject.Inject;
import java.io.IOException;
import java.util.Iterator;
import org.springframework.context.ApplicationContext;
import org.springframework.transaction.TransactionException;

public class ServerTransactionAssertion extends ServerCompositeAssertion<TransactionAssertion> {
   @Inject
   private JdbcConnectionPoolManager jdbcConnectionPoolManager;
   private final String[] h;
   private final String i;
   private final ServerCompositeAssertion.AssertionResultListener j;
   private static final String[] k;

   // $VF: Handled exception range with multiple entry points by splitting it
   // $VF: Duplicated exception handlers to handle obfuscated exceptions
   public ServerTransactionAssertion(TransactionAssertion var1, ApplicationContext var2) throws PolicyAssertionException, LicenseException {
      label19: {
         super(var1, var2);
         this.j = new f(this);
         this.h = this.assertion.getVariablesUsed();
         if (this.assertion.getConnectionName() != null) {
            try {
               if (!this.assertion.getConnectionName().isEmpty()) {
                  break label19;
               }
            } catch (PolicyAssertionException var4) {
               throw b(var4);
            }
         }

         try {
            this.i = this.a(var1);
            return;
         } catch (PolicyAssertionException var3) {
            throw b(var3);
         }
      }

      this.i = null;
   }

   @Override
   public AssertionStatus checkRequest(PolicyEnforcementContext param1) throws IOException, PolicyAssertionException {
      // $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:
      // 000: aload 0
      // 001: getfield com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.i Ljava/lang/String;
      // 004: astore 2
      // 005: aload 0
      // 006: getfield com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 009: checkcast com/l7tech/policy/assertion/composite/TransactionAssertion
      // 00c: invokevirtual com/l7tech/policy/assertion/composite/TransactionAssertion.getConnectionName ()Ljava/lang/String;
      // 00f: ifnull 04b
      // 012: aload 0
      // 013: getfield com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 016: checkcast com/l7tech/policy/assertion/composite/TransactionAssertion
      // 019: invokevirtual com/l7tech/policy/assertion/composite/TransactionAssertion.getConnectionName ()Ljava/lang/String;
      // 01c: invokevirtual java/lang/String.isEmpty ()Z
      // 01f: ifne 04b
      // 022: goto 029
      // 025: invokestatic com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 028: athrow
      // 029: aload 1
      // 02a: aload 0
      // 02b: getfield com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.h [Ljava/lang/String;
      // 02e: aload 0
      // 02f: invokevirtual com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.getAudit ()Lcom/l7tech/gateway/common/audit/Audit;
      // 032: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getVariableMap ([Ljava/lang/String;Lcom/l7tech/gateway/common/audit/Audit;)Ljava/util/Map; 3
      // 037: astore 3
      // 038: aload 0
      // 039: getfield com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 03c: checkcast com/l7tech/policy/assertion/composite/TransactionAssertion
      // 03f: invokevirtual com/l7tech/policy/assertion/composite/TransactionAssertion.getConnectionName ()Ljava/lang/String;
      // 042: aload 3
      // 043: aload 0
      // 044: invokevirtual com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.getAudit ()Lcom/l7tech/gateway/common/audit/Audit;
      // 047: invokestatic com/l7tech/server/policy/variable/ExpandVariables.process (Ljava/lang/String;Ljava/util/Map;Lcom/l7tech/gateway/common/audit/Audit;)Ljava/lang/String;
      // 04a: astore 2
      // 04b: aload 2
      // 04c: ifnull 05d
      // 04f: aload 2
      // 050: invokevirtual java/lang/String.isEmpty ()Z
      // 053: ifeq 06b
      // 056: goto 05d
      // 059: invokestatic com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 05c: athrow
      // 05d: aload 0
      // 05e: aload 1
      // 05f: aload 0
      // 060: getfield com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.j Lcom/l7tech/server/policy/assertion/composite/ServerCompositeAssertion$AssertionResultListener;
      // 063: invokevirtual com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.iterateChildren (Lcom/l7tech/server/message/PolicyEnforcementContext;Lcom/l7tech/server/policy/assertion/composite/ServerCompositeAssertion$AssertionResultListener;)Lcom/l7tech/policy/assertion/AssertionStatus;
      // 066: areturn
      // 067: invokestatic com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 06a: athrow
      // 06b: aload 0
      // 06c: getfield com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.jdbcConnectionPoolManager Lcom/l7tech/server/jdbc/JdbcConnectionPoolManager;
      // 06f: aload 2
      // 070: invokevirtual com/l7tech/server/jdbc/JdbcConnectionPoolManager.getDataSource (Ljava/lang/String;)Ljavax/sql/DataSource;
      // 073: astore 3
      // 074: goto 0a6
      // 077: astore 4
      // 079: aload 0
      // 07a: getstatic com/l7tech/gateway/common/audit/AssertionMessages.JDBC_CONNECTION_ERROR Lcom/l7tech/gateway/common/audit/Messages$M;
      // 07d: bipush 1
      // 07e: anewarray 78
      // 081: dup
      // 082: bipush 0
      // 083: aload 2
      // 084: aload 4
      // 086: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 089: getstatic com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.k [Ljava/lang/String;
      // 08c: astore 6
      // 08e: aload 6
      // 090: bipush 0
      // 091: aaload
      // 092: dup_x2
      // 093: pop
      // 094: aload 6
      // 096: bipush 4
      // 097: aaload
      // 098: swap
      // 099: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001\u0001" ]
      // 09e: aastore
      // 09f: invokevirtual com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.logAndAudit (Lcom/l7tech/gateway/common/audit/AuditDetailMessage;[Ljava/lang/String;)V
      // 0a2: getstatic com/l7tech/policy/assertion/AssertionStatus.SERVER_ERROR Lcom/l7tech/policy/assertion/AssertionStatus;
      // 0a5: areturn
      // 0a6: aload 3
      // 0a7: ifnonnull 0d1
      // 0aa: aload 0
      // 0ab: getstatic com/l7tech/gateway/common/audit/AssertionMessages.JDBC_CONNECTION_ERROR Lcom/l7tech/gateway/common/audit/Messages$M;
      // 0ae: bipush 1
      // 0af: anewarray 78
      // 0b2: dup
      // 0b3: bipush 0
      // 0b4: aload 2
      // 0b5: getstatic com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.k [Ljava/lang/String;
      // 0b8: bipush 2
      // 0b9: aaload
      // 0ba: swap
      // 0bb: getstatic com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.k [Ljava/lang/String;
      // 0be: bipush 3
      // 0bf: aaload
      // 0c0: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 0c5: aastore
      // 0c6: invokevirtual com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.logAndAudit (Lcom/l7tech/gateway/common/audit/AuditDetailMessage;[Ljava/lang/String;)V
      // 0c9: getstatic com/l7tech/policy/assertion/AssertionStatus.SERVER_ERROR Lcom/l7tech/policy/assertion/AssertionStatus;
      // 0cc: areturn
      // 0cd: invokestatic com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0d0: athrow
      // 0d1: new org/springframework/transaction/support/TransactionTemplate
      // 0d4: dup
      // 0d5: new org/springframework/jdbc/datasource/DataSourceTransactionManager
      // 0d8: dup
      // 0d9: aload 3
      // 0da: invokespecial org/springframework/jdbc/datasource/DataSourceTransactionManager.<init> (Ljavax/sql/DataSource;)V
      // 0dd: invokespecial org/springframework/transaction/support/TransactionTemplate.<init> (Lorg/springframework/transaction/PlatformTransactionManager;)V
      // 0e0: astore 4
      // 0e2: aload 4
      // 0e4: new com/l7tech/server/policy/assertion/composite/g
      // 0e7: dup
      // 0e8: aload 0
      // 0e9: aload 1
      // 0ea: invokespecial com/l7tech/server/policy/assertion/composite/g.<init> (Lcom/l7tech/server/policy/assertion/composite/ServerTransactionAssertion;Lcom/l7tech/server/message/PolicyEnforcementContext;)V
      // 0ed: invokevirtual org/springframework/transaction/support/TransactionTemplate.execute (Lorg/springframework/transaction/support/TransactionCallback;)Ljava/lang/Object;
      // 0f0: checkcast com/l7tech/policy/assertion/AssertionStatus
      // 0f3: areturn
      // 0f4: astore 4
      // 0f6: aload 4
      // 0f8: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 0fb: astore 5
      // 0fd: aload 0
      // 0fe: getstatic com/l7tech/gateway/common/audit/AssertionMessages.JDBC_CONNECTION_ERROR Lcom/l7tech/gateway/common/audit/Messages$M;
      // 101: bipush 1
      // 102: anewarray 78
      // 105: dup
      // 106: bipush 0
      // 107: aload 2
      // 108: aload 5
      // 10a: getstatic com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.k [Ljava/lang/String;
      // 10d: astore 6
      // 10f: aload 6
      // 111: bipush 2
      // 112: aaload
      // 113: dup_x2
      // 114: pop
      // 115: aload 6
      // 117: bipush 1
      // 118: aaload
      // 119: swap
      // 11a: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001\u0001" ]
      // 11f: aastore
      // 120: invokevirtual com/l7tech/server/policy/assertion/composite/ServerTransactionAssertion.logAndAudit (Lcom/l7tech/gateway/common/audit/AuditDetailMessage;[Ljava/lang/String;)V
      // 123: getstatic com/l7tech/policy/assertion/AssertionStatus.FAILED Lcom/l7tech/policy/assertion/AssertionStatus;
      // 126: areturn
      // try (35 -> 47): 47 java/sql/SQLException
      // try (33 -> 38): 39 java/sql/SQLException
      // try (3 -> 14): 15 java/sql/SQLException
      // try (49 -> 54): 55 java/sql/SQLException
      // try (49 -> 54): 55 javax/naming/NamingException
      // try (81 -> 102): 102 java/sql/SQLException
      // try (104 -> 120): 121 org/springframework/transaction/TransactionException
      // try (104 -> 120): 121 org/springframework/dao/DataAccessException
   }

   private String a(Assertion var1) {
      Iterator var2 = var1.preorderIterator();

      while (var2.hasNext()) {
         Assertion var3 = (Assertion)var2.next();
         if (var3 != null && var3.isEnabled()) {
            try {
               if (var1.equals(var3)) {
                  continue;
               }
            } catch (TransactionException var7) {
               throw b(var7);
            }

            try {
               if (var3 instanceof JdbcConnectionable) {
                  return ((JdbcConnectionable)var3).getConnectionName();
               }
            } catch (TransactionException var6) {
               throw b(var6);
            }

            if (var3 instanceof CompositeAssertion) {
               String var4 = this.a(var3);

               try {
                  if (var4 != null) {
                     return var4;
                  }
               } catch (TransactionException var5) {
                  throw b(var5);
               }
            }
         }
      }

      return null;
   }

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

   static {
      String[] var5 = new String[5];
      int var3 = 0;
      String var2 = "\u0015\rO.\b1R\u001f\rO`\u00033K\u0013B\u0003\u0017TX\u0001\u0014\u001f3H\u0005\u0003B4\u0004=HV\u0004@)\u00017BLB\u0011\u0015\rO.\b1R\u001f\rO`\u00033K\u0013B\u0003";
      int var4 = "\u0015\rO.\b1R\u001f\rO`\u00033K\u0013B\u0003\u0017TX\u0001\u0014\u001f3H\u0005\u0003B4\u0004=HV\u0004@)\u00017BLB\u0011\u0015\rO.\b1R\u001f\rO`\u00033K\u0013B\u0003"
         .length();
      char var1 = 17;
      int var7 = -1;

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

         while (true) {
            String var8 = c(var10000, b(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 = "IE\u001c\u00174\rxK\u001cS3\u001e*X\u001f\u0016S3P+Z\u001f\u001e\u001c.\u001f:I\b\u001a\u001c3\u001f;\u001b\r\u0010I3\u0014\u0003IE\u001c";
                  var4 = "IE\u001c\u00174\rxK\u001cS3\u001e*X\u001f\u0016S3P+Z\u001f\u001e\u001c.\u001f:I\b\u001a\u001c3\u001f;\u001b\r\u0010I3\u0014\u0003IE\u001c"
                     .length();
                  var1 = '(';
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String c(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 -> 86;
            case 1 -> 66;
            case 2 -> 1;
            case 3 -> 96;
            case 4 -> 77;
            case 5 -> 114;
            default -> 6;
         });
      }

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