package com.l7tech.server.store;

import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.policy.CustomKeyValueStore;
import com.l7tech.policy.assertion.ext.store.KeyValueStoreChangeEventListener;
import com.l7tech.policy.assertion.ext.store.KeyValueStoreListener;
import com.l7tech.policy.assertion.ext.store.KeyValueStoreChangeEventListener.Callback;
import com.l7tech.policy.assertion.ext.store.KeyValueStoreChangeEventListener.Event;
import com.l7tech.policy.assertion.ext.store.KeyValueStoreChangeEventListener.Operation;
import com.l7tech.server.HibernateEntityManager;
import com.l7tech.server.event.EntityInvalidationEvent;
import com.l7tech.server.policy.CustomKeyValueStoreManager;
import com.l7tech.server.util.ApplicationEventProxy;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.ApplicationEvent;

public class CustomKeyValueStoreManagerImpl extends HibernateEntityManager<CustomKeyValueStore, EntityHeader> implements CustomKeyValueStoreManager {
   private final Map<Goid, String> m = new ConcurrentHashMap<>();
   private final a n = new a(this);
   private static final String[] o;

   public CustomKeyValueStoreManagerImpl(ApplicationEventProxy var1) {
      var1.addApplicationListener(new c(this));
   }

   public Class<? extends Entity> getImpClass() {
      return CustomKeyValueStore.class;
   }

   @NotNull
   @Override
   public Collection<CustomKeyValueStore> findByKeyPrefix(@NotNull String var1) throws FindException {
      try {
         if (var1 == null) {
            b(0);
         }
      } catch (Exception var4) {
         throw a(var4);
      }

      Collection var10000;
      try {
         var10000 = Objects.requireNonNull((Collection)this.getHibernateTemplate().execute(new d(this, var1)));
      } catch (Exception var3) {
         throw new FindException(o[5] + var1, var3);
      }

      if (var10000 == null) {
         b(1);
      }

      return var10000;
   }

   public CustomKeyValueStore findByUniqueName(String var1) throws FindException {
      try {
         if (var1 == null) {
            return null;
         }
      } catch (FindException var2) {
         throw a(var2);
      }

      return (CustomKeyValueStore)super.findByUniqueName(var1);
   }

   @Override
   public void deleteByKey(@NotNull String var1) throws DeleteException {
      try {
         if (var1 == null) {
            b(2);
         }
      } catch (FindException var5) {
         throw a(var5);
      }

      try {
         CustomKeyValueStore var2 = this.findByUniqueName(var1);

         try {
            if (var2 != null) {
               this.delete(var2);
            }
         } catch (FindException var3) {
            throw a(var3);
         }
      } catch (FindException var4) {
         throw new DeleteException(o[7] + var1, var4);
      }
   }

   @Override
   public <T extends KeyValueStoreListener> T getListener(Class<T> var1) {
      try {
         return (T)(KeyValueStoreChangeEventListener.class.equals(var1) ? this.n : null);
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }
   }

   public void delete(CustomKeyValueStore var1) throws DeleteException {
      super.delete(var1);
      this.m.put(var1.getGoid(), var1.getName());
   }

   private void a(ApplicationEvent var1) {
      try {
         if (!(var1 instanceof EntityInvalidationEvent)) {
            return;
         }
      } catch (FindException var17) {
         throw a(var17);
      }

      EntityInvalidationEvent var2 = (EntityInvalidationEvent)var1;

      try {
         if (!CustomKeyValueStore.class.equals(var2.getEntityClass())) {
            return;
         }
      } catch (FindException var16) {
         throw a(var16);
      }

      Goid[] var3 = var2.getEntityIds();
      char[] var4 = var2.getEntityOperations();
      ArrayList var5 = new ArrayList(var3.length);

      for (int var6 = 0; var6 < var3.length; var6++) {
         String var7 = null;
         char var9 = var4[var6];
         Goid var10 = var3[var6];
         Operation var8;
         if (var9 == 'C') {
            var8 = Operation.CREATE;

            try {
               CustomKeyValueStore var11 = this.findByPrimaryKey(var10);
               if (var11 != null) {
                  var7 = var11.getName();
               }
            } catch (FindException var14) {
               var7 = null;
            }
         } else if (var9 == 'U') {
            var8 = Operation.UPDATE;

            try {
               CustomKeyValueStore var25 = this.findByPrimaryKey(var10);
               if (var25 != null) {
                  var7 = var25.getName();
               }
            } catch (FindException var13) {
               var7 = null;
            }
         } else {
            if (var9 != 'D') {
               throw new IllegalArgumentException(o[8] + var9);
            }

            var8 = Operation.DELETE;
            var7 = this.m.remove(var10);
         }

         try {
            if (var7 != null) {
               var5.add(new b(this, var7, var8));
            }
         } catch (FindException var15) {
            throw a(var15);
         }
      }

      for (Entry var19 : this.n.a().entrySet()) {
         ArrayList var20 = new ArrayList(var5.size());

         for (Event var23 : var5) {
            try {
               if (var23.getKey().startsWith((String)var19.getKey())) {
                  var20.add(var23);
               }
            } catch (FindException var12) {
               throw a(var12);
            }
         }

         for (Callback var24 : (Set)var19.getValue()) {
            var24.onEvent(var20);
         }
      }
   }

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

   static {
      String[] var5 = new String[12];
      int var3 = 0;
      String var2 = "N2h\u0013\u0002 4H>m\u0013\u001dr2[8w\u0013\u001dc/_8*\u007f\u001bd4B0NY\u0017A!A(`o\u001ax2H\u0010dR\u000fp%_\u0014hL\u0002\u000fK4kX,n\u000bH$UN\u000bq)U\u000fK4kX,n\u000bH$UN\u000bq)U6N2h\u0013\u0002 4H>m\u0013\u001dr2[8w\u0013\u001dc/_8*\u007f\u001bd4B0NY\u0017A!A(`o\u001ax2H\u0010dR\u000fp%_\u0014hL\u0002\u000bI8iY\u001ar\u0002T\u0016`E!x3d^\u0002r`Y2%Z\u0007y$\r(vU\u0000p`F8|\u001c\u001ee%K4}\u0006N\u0003F8|\u001cx3d^\u0002r`Y2%X\u000b{%Y8%I\u001d~.J}nY\u0017-`\u0016x3`D\u001er#Y8a\u001c\u0001g%_<qU\u0001yz\r*m\u0013jH b,A}hY\u001a\u007f/I} O@23\r0pO\u001a7.B)%N\u000bc5_3%R\u001b{,";
      int var4 = "N2h\u0013\u0002 4H>m\u0013\u001dr2[8w\u0013\u001dc/_8*\u007f\u001bd4B0NY\u0017A!A(`o\u001ax2H\u0010dR\u000fp%_\u0014hL\u0002\u000fK4kX,n\u000bH$UN\u000bq)U\u000fK4kX,n\u000bH$UN\u000bq)U6N2h\u0013\u0002 4H>m\u0013\u001dr2[8w\u0013\u001dc/_8*\u007f\u001bd4B0NY\u0017A!A(`o\u001ax2H\u0010dR\u000fp%_\u0014hL\u0002\u000bI8iY\u001ar\u0002T\u0016`E!x3d^\u0002r`Y2%Z\u0007y$\r(vU\u0000p`F8|\u001c\u001ee%K4}\u0006N\u0003F8|\u001cx3d^\u0002r`Y2%X\u000b{%Y8%I\u001d~.J}nY\u0017-`\u0016x3`D\u001er#Y8a\u001c\u0001g%_<qU\u0001yz\r*m\u0013jH b,A}hY\u001a\u007f/I} O@23\r0pO\u001a7.B)%N\u000bc5_3%R\u001b{,"
         .length();
      char var1 = '6';
      int var7 = -1;

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

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

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

                  var2 = "Z$`p\u0000n:X9>p3~U\u001fn2Ea\u007fO\u0000+\u001c\u007f.mn\u0007g0\u00111xR\u0013f9E$k\u0000U./\u0016avFR./\u001fdj\u0000\u001f~/EawO\u0006+>TawU\u001eg";
                  var4 = "Z$`p\u0000n:X9>p3~U\u001fn2Ea\u007fO\u0000+\u001c\u007f.mn\u0007g0\u00111xR\u0013f9E$k\u0000U./\u0016avFR./\u001fdj\u0000\u001f~/EawO\u0006+>TawU\u001eg"
                     .length();
                  var1 = '\t';
                  var7 = -1;
            }

            var10000 = 26;
            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 b(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 -> 43;
            case 1 -> 91;
            case 2 -> 3;
            case 3 -> 58;
            case 4 -> 104;
            case 5 -> 17;
            default -> 70;
         });
      }

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