package com.l7tech.server.security.rbac;

import com.l7tech.gateway.common.security.rbac.OperationType;
import com.l7tech.gateway.common.security.rbac.PermissionDeniedException;
import com.l7tech.identity.User;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.SecurityZone;
import com.l7tech.objectmodel.ZoneableEntity;
import com.l7tech.server.EntityFinder;
import jakarta.inject.Inject;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang3.Validate;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class ZoneUpdateSecurityCheckerImpl implements ZoneUpdateSecurityChecker {
   @Inject
   private EntityFinder entityFinder;
   @Inject
   private RbacServices rbacServices;
   private static final String[] a;

   @Override
   public void checkBulkUpdatePermitted(@NotNull User var1, @Nullable Goid var2, @NotNull EntityType var3, @NotNull Collection<Serializable> var4) throws FindException {
      try {
         if (var1 == null) {
            a(0);
         }
      } catch (NullPointerException var14) {
         throw a(var14);
      }

      try {
         if (var3 == null) {
            a(1);
         }
      } catch (NullPointerException var12) {
         throw a(var12);
      }

      try {
         if (var4 == null) {
            a(2);
         }
      } catch (NullPointerException var13) {
         throw a(var13);
      }

      boolean var10000 = var3.isSecurityZoneable();
      String var10001 = String.valueOf(var3);
      String[] var10 = a;
      Validate.isTrue(var10000, var10[6] + var10001, new Object[0]);
      SecurityZone var5 = null;
      if (var2 != null) {
         var5 = this.entityFinder.find(SecurityZone.class, var2);

         try {
            Validate.notNull(var5, var10[7] + var2.toHexString() + var10[10], new Object[0]);
         } catch (NullPointerException var11) {
            throw new IllegalArgumentException(var11);
         }
      }

      if (!this.rbacServices.isPermittedForAnyEntityOfType(var1, OperationType.UPDATE, var3)) {
         for (Serializable var7 : var4) {
            Entity var8 = this.entityFinder.find(var3.getEntityClass(), var7);
            if (!(var8 instanceof ZoneableEntity var9)) {
               String var10002 = String.valueOf(var7);
               var10 = a;
               throw new IllegalArgumentException(var10[3] + var10002 + var10[1]);
            }

            this.a(var1, var8);
            var9.setSecurityZone(var5);
            this.a(var1, var8);
         }
      }
   }

   @Override
   public void checkBulkUpdatePermitted(@NotNull User var1, @Nullable Goid var2, @NotNull Map<EntityType, Collection<Serializable>> var3) throws FindException {
      try {
         if (var1 == null) {
            a(3);
         }
      } catch (FindException var6) {
         throw a(var6);
      }

      try {
         if (var3 == null) {
            a(4);
         }
      } catch (FindException var7) {
         throw a(var7);
      }

      for (Entry var5 : var3.entrySet()) {
         this.checkBulkUpdatePermitted(var1, var2, (EntityType)var5.getKey(), (Collection<Serializable>)var5.getValue());
      }
   }

   private void a(User var1, Entity var2) throws FindException {
      try {
         if (!this.rbacServices.isPermittedForEntity(var1, var2, OperationType.UPDATE, null)) {
            throw new PermissionDeniedException(OperationType.UPDATE, var2, null);
         }
      } catch (FindException var3) {
         throw a(var3);
      }
   }

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

   static {
      String[] var5 = new String[11];
      int var3 = 0;
      String var2 = "#U5\u00043$@\u0016\u00074\u001e,an,H&?+-BBW3\u0003?,K\u0016B Qyd]E\u0007=\u0017~d]L\u0002!Q34]\u0016\u0007<\u001e*aL\u0007\u0007<\u00042-+BC=\u0014-a@\rSr\u0014&(]\u0016\u0007=\u0003~(]BI=\u0005~\u0012K\u0001R \u0018*8\u000e8H<\u0014?#B\u0007\u0004\u0017T7\u0003\u000f'I&\u0018*8\u000e\u0015N&\u0019~(JB\n\u0007I&\u0018*8z\u001bW7\t\u0007I&\u0018*8g\u0006T&'I&\u0018*8\u000e\u0016^\"\u0014~(]BI=\u0005~2K\u0001R \u0018*8\u000e\u0018H<\u0014?#B\u0007\u001dr\u001b,Hr\u0002;\"[\u0010N&\b~;A\fBr\u000675FB@=\u0018:a=\u0001H?^2vZ\u0007D:^-$\\\u0014B ^-$M\u0017U;\u0005'n\\\u0000F1^\u0004.@\u0007r\"\u0015?5K1B1\u0004,(Z\u001bd:\u0014=*K\u0010n?\u00012";
      int var4 = "#U5\u00043$@\u0016\u00074\u001e,an,H&?+-BBW3\u0003?,K\u0016B Qyd]E\u0007=\u0017~d]L\u0002!Q34]\u0016\u0007<\u001e*aL\u0007\u0007<\u00042-+BC=\u0014-a@\rSr\u0014&(]\u0016\u0007=\u0003~(]BI=\u0005~\u0012K\u0001R \u0018*8\u000e8H<\u0014?#B\u0007\u0004\u0017T7\u0003\u000f'I&\u0018*8\u000e\u0015N&\u0019~(JB\n\u0007I&\u0018*8z\u001bW7\t\u0007I&\u0018*8g\u0006T&'I&\u0018*8\u000e\u0016^\"\u0014~(]BI=\u0005~2K\u0001R \u0018*8\u000e\u0018H<\u0014?#B\u0007\u001dr\u001b,Hr\u0002;\"[\u0010N&\b~;A\fBr\u000675FB@=\u0018:a=\u0001H?^2vZ\u0007D:^-$\\\u0014B ^-$M\u0017U;\u0005'n\\\u0000F1^\u0004.@\u0007r\"\u0015?5K1B1\u0004,(Z\u001bd:\u0014=*K\u0010n?\u00012"
         .length();
      char var1 = '>';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 124;
         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 = "\\\u0012jOh^\u0006S\u0011Z\\g}\u0007Z*j^nu\u0007K\u001fk\b\u001f\u001fwEph\u0000\u0011";
                  var4 = "\\\u0012jOh^\u0006S\u0011Z\\g}\u0007Z*j^nu\u0007K\u001fk\b\u001f\u001fwEph\u0000\u0011".length();
                  var1 = 24;
                  var7 = -1;
            }

            var10000 = 33;
            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] ^ 82);
      }

      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 -> 30;
            case 1 -> 91;
            case 2 -> 46;
            case 3 -> 13;
            case 4 -> 34;
            case 5 -> 61;
            default -> 82;
         });
      }

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