package com.l7tech.server.task;

import com.l7tech.gateway.common.Component;
import com.l7tech.gateway.common.audit.SystemAuditRecord;
import com.l7tech.gateway.common.audit.SystemMessages;
import com.l7tech.gateway.common.audit.Messages.M;
import com.l7tech.identity.IdentityProvider;
import com.l7tech.identity.User;
import com.l7tech.message.Message;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.polback.BackgroundTask;
import com.l7tech.security.token.OpaqueSecurityToken;
import com.l7tech.server.audit.Auditor;
import com.l7tech.server.identity.AuthenticationResult;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.message.PolicyEnforcementContextFactory;
import com.l7tech.server.polback.PolicyBackedServiceRegistry;
import jakarta.inject.Inject;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class ScheduledPolicyRunner {
   private static Logger a;
   @Inject
   protected PolicyBackedServiceRegistry pbsReg;
   private static ScheduledPolicyRunner b;
   @NotNull
   private ScheduledTaskJobManager c;
   private Auditor d;
   private static final String[] e;

   public static void setInstance(ScheduledPolicyRunner var0) {
      b = var0;
   }

   @NotNull
   public static ScheduledPolicyRunner getInstance(@NotNull ScheduledTaskJobManager var0) {
      try {
         if (var0 == null) {
            a(0);
         }
      } catch (RuntimeException var2) {
         throw a(var2);
      }

      try {
         if (b == null) {
            b = new ScheduledPolicyRunner(var0);
         }
      } catch (RuntimeException var3) {
         throw a(var3);
      }

      try {
         if (b == null) {
            a(1);
         }

         return b;
      } catch (RuntimeException var1) {
         throw a(var1);
      }
   }

   @Nullable
   public static ScheduledPolicyRunner getInstance() {
      return b;
   }

   private ScheduledPolicyRunner(ScheduledTaskJobManager var1) {
      this.c = var1;
   }

   public boolean isClusterMaster() {
      return this.c.clusterMaster.isMaster();
   }

   public void runBackgroundTask(String var1, Goid var2, Goid var3, String var4) {
      Method var5;
      try {
         String[] var10 = e;
         var5 = BackgroundTask.class.getMethod(var10[3]);
      } catch (NoSuchMethodException var12) {
         throw new RuntimeException(var12);
      }

      PolicyEnforcementContext var6 = PolicyEnforcementContextFactory.createPolicyEnforcementContext(new Message(), new Message());

      label34: {
         try {
            if (var3 == null || var4 == null) {
               break label34;
            }
         } catch (NoSuchMethodException var13) {
            throw a(var13);
         }

         try {
            IdentityProvider var7 = this.c.identityProviderFactory.getProvider(var3);
            if (var7 == null) {
               Auditor var19 = this.a();
               M var20 = SystemMessages.SCHEDULER_POLICY_ERROR;
               String[] var21 = new String[1];
               String[] var17 = e;
               var21[0] = var17[4];
               var19.logAndAudit(var20, var21);
               return;
            }

            User var8 = var7.getUserManager().findByPrimaryKey(var4);
            AuthenticationResult var9 = new AuthenticationResult(var8, new OpaqueSecurityToken(var8.getLogin(), null));
            var6.getDefaultAuthenticationContext().addAuthenticationResult(var9);
         } catch (FindException var11) {
            Auditor var10000 = this.a();
            M var10001 = SystemMessages.SCHEDULER_POLICY_ERROR;
            String[] var10002 = new String[1];
            String[] var16 = e;
            var10002[0] = var16[6];
            var10000.logAndAudit(var10001, var10002);
         }
      }

      BackgroundTask var14 = this.c.pbsReg.getImplementationProxyForSingleMethod(var5, var2, var6);
      String[] var18 = e;
      SystemAuditRecord var15 = new SystemAuditRecord(
         Level.INFO,
         this.c.nodeId,
         Component.GW_SCHEDULED_TASK,
         var18[11] + var1,
         false,
         null,
         null,
         null,
         var18[0],
         this.c.clusterInfoManager.getSelfNodeInf().getAddress()
      );
      this.c.auditContextFactory.doWithNewAuditContext(var15, new a(this, var14, var1, var6));
   }

   private Auditor a() {
      try {
         if (this.d == null) {
            this.d = new Auditor(this, this.c.applicationContext, a);
         }
      } catch (RuntimeException var1) {
         throw a(var1);
      }

      return this.d;
   }

   static {
      String[] var5 = new String[12];
      int var3 = 0;
      String var2 = "Z0\u0012\u000bO \bmU!&I+\u001fA\nB*\u001eiZ<3O \u000e\u0003Z0\u0012\u001ba!\u0019JO;&Qe\fVT$;L \u000e\u0004U=&\b#\u0013QU6,K*\u0011\u000bWe&M&\u0014\u000bH7 ^ \u000e\u000bO3!Cj/GS76])\u0019@k=>A&\u0005vN<<M7\u001ba!\u0019JO;&Qe\fVT$;L \u000e\u0004U=&\b#\u0013QU6>i7\u001bQV7<\\e\u001aKIr\u0012f*\bjN>>\b5\u001dVZ?7\\ \u000e\u0004\u001cw!\u000fe\u0013B\u001bw!\u0006`\u000f\u0004V'!\\e\u0012KOr0Me\u0012QW>*h\u000b\u0013Pu'>De\u0011AO:=LeYW\u0015w!\b(\tWOr<G1\\V^&'Z+\\JN>>,K*\u0011\u000bWe&M&\u0014\u000bH7 ^ \u000e\u000bO3!Cj/GS76])\u0019@k=>A&\u0005vN<<M7";
      int var4 = "Z0\u0012\u000bO \bmU!&I+\u001fA\nB*\u001eiZ<3O \u000e\u0003Z0\u0012\u001ba!\u0019JO;&Qe\fVT$;L \u000e\u0004U=&\b#\u0013QU6,K*\u0011\u000bWe&M&\u0014\u000bH7 ^ \u000e\u000bO3!Cj/GS76])\u0019@k=>A&\u0005vN<<M7\u001ba!\u0019JO;&Qe\fVT$;L \u000e\u0004U=&\b#\u0013QU6>i7\u001bQV7<\\e\u001aKIr\u0012f*\bjN>>\b5\u001dVZ?7\\ \u000e\u0004\u001cw!\u000fe\u0013B\u001bw!\u0006`\u000f\u0004V'!\\e\u0012KOr0Me\u0012QW>*h\u000b\u0013Pu'>De\u0011AO:=LeYW\u0015w!\b(\tWOr<G1\\V^&'Z+\\JN>>,K*\u0011\u000bWe&M&\u0014\u000bH7 ^ \u000e\u000bO3!Cj/GS76])\u0019@k=>A&\u0005vN<<M7"
         .length();
      char var1 = 3;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 90;
         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) {
                     e = var5;
                     a = Logger.getLogger(ScheduledPolicyRunner.class.getName());
                     return;
                  }

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

                  var2 = "`\u000f'Bz\u000e\tf\u00040n/B\u00126ha\t\u0014i\rsiu\u001e\u0016`\u0018<~z\u0019]w\u0005?bw\u0004]a\u0005!+g\u001e\u0015b\u000e&gq\u0019]s\u000b `4";
                  var4 = "`\u000f'Bz\u000e\tf\u00040n/B\u00126ha\t\u0014i\rsiu\u001e\u0016`\u0018<~z\u0019]w\u0005?bw\u0004]a\u0005!+g\u001e\u0015b\u000e&gq\u0019]s\u000b `4"
                     .length();
                  var1 = 11;
                  var7 = -1;
            }

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

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

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

      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 -> 114;
            case 1 -> 31;
            case 2 -> 38;
            case 3 -> 126;
            case 4 -> 97;
            case 5 -> 8;
            default -> 8;
         });
      }

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