package com.l7tech.server.cluster;

import com.l7tech.util.Config;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.Triple;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Logger;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionException;

public class ClusterMasterImpl implements ClusterMaster {
   private static final Logger a;
   private static final long b;
   private static final long c;
   private final AtomicBoolean d = new AtomicBoolean(false);

   public ClusterMasterImpl(PlatformTransactionManager var1, DataSource var2, Config var3, Timer var4, String var5) {
      var4.schedule(new ClusterMasterImpl.MasterCheckTask(var1, var2, var3, this.d, var5), 0L, b);
   }

   @Override
   public boolean isMaster() {
      return this.d.get();
   }

   static {
      String[] var0 = new String[2];
      int var4 = 0;
      String var3 = "|:'\u00020-6z6\"\u0002/\u007f0i08\u0002?v7l!/^rw#l!/^\bs/z:?X(|:'\u00020-6z6\"\u0002/\u007f0i08\u0002?v7l!/^rw#l!/^\u0015t6z'<M0";
      int var5 = "|:'\u00020-6z6\"\u0002/\u007f0i08\u0002?v7l!/^rw#l!/^\bs/z:?X(|:'\u00020-6z6\"\u0002/\u007f0i08\u0002?v7l!/^rw#l!/^\u0015t6z'<M0".length();
      char var2 = '\'';
      int var1 = -1;

      while (true) {
         String var10002 = a(96, a(var3.substring(++var1, var1 + var2)));
         byte var10001 = -1;
         var0[var4++] = var10002;
         if ((var1 += var2) >= var5) {
            a = Logger.getLogger(ClusterMasterImpl.class.getName());
            b = ConfigFactory.getLongProperty(var0[1], 10000L);
            c = ConfigFactory.getLongProperty(var0[0], 40000L);
            return;
         }

         var2 = var3.charAt(var1);
      }
   }

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

      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 -> 127;
            case 1 -> 53;
            case 2 -> 42;
            case 3 -> 76;
            case 4 -> 60;
            case 5 -> 122;
            default -> 34;
         });
      }

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

   private static final class MasterCheckTask extends TimerTask {
      private final Config a;
      private final PlatformTransactionManager b;
      private final JdbcTemplate c;
      private final AtomicBoolean d;
      private final String e;
      private static final String[] f;

      MasterCheckTask(PlatformTransactionManager var1, DataSource var2, Config var3, AtomicBoolean var4, String var5) {
         this.a = var3;
         this.b = var1;
         this.c = new JdbcTemplate(var2);
         this.d = var4;
         this.e = var5;
      }

      @Override
      public void run() {
         // $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:
         // 00: aload 0
         // 01: getfield com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.d Ljava/util/concurrent/atomic/AtomicBoolean;
         // 04: invokevirtual java/util/concurrent/atomic/AtomicBoolean.get ()Z
         // 07: istore 1
         // 08: new org/springframework/transaction/support/TransactionTemplate
         // 0b: dup
         // 0c: aload 0
         // 0d: getfield com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.b Lorg/springframework/transaction/PlatformTransactionManager;
         // 10: invokespecial org/springframework/transaction/support/TransactionTemplate.<init> (Lorg/springframework/transaction/PlatformTransactionManager;)V
         // 13: astore 2
         // 14: aload 2
         // 15: new com/l7tech/server/cluster/i
         // 18: dup
         // 19: aload 0
         // 1a: invokespecial com/l7tech/server/cluster/i.<init> (Lcom/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask;)V
         // 1d: invokevirtual org/springframework/transaction/support/TransactionTemplate.execute (Lorg/springframework/transaction/support/TransactionCallback;)Ljava/lang/Object;
         // 20: checkcast java/lang/Boolean
         // 23: astore 3
         // 24: aload 3
         // 25: ifnull 3a
         // 28: aload 0
         // 29: getfield com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.d Ljava/util/concurrent/atomic/AtomicBoolean;
         // 2c: aload 3
         // 2d: invokevirtual java/lang/Boolean.booleanValue ()Z
         // 30: invokevirtual java/util/concurrent/atomic/AtomicBoolean.set (Z)V
         // 33: goto 3a
         // 36: invokestatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.a (Lorg/springframework/transaction/TransactionException;)Lorg/springframework/transaction/TransactionException;
         // 39: athrow
         // 3a: goto c7
         // 3d: astore 3
         // 3e: getstatic com/l7tech/server/cluster/ClusterMasterImpl.a Ljava/util/logging/Logger;
         // 41: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
         // 44: aload 3
         // 45: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
         // 48: getstatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.f [Ljava/lang/String;
         // 4b: astore 5
         // 4d: aload 5
         // 4f: bipush 3
         // 50: aaload
         // 51: swap
         // 52: aload 5
         // 54: bipush 9
         // 56: aaload
         // 57: 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" ]
         // 5c: aload 3
         // 5d: invokestatic com/l7tech/util/ExceptionUtils.getDebugException (Ljava/lang/Throwable;)Ljava/lang/Throwable;
         // 60: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
         // 63: goto c7
         // 66: astore 3
         // 67: aload 3
         // 68: ldc java/sql/SQLException
         // 6a: invokestatic com/l7tech/util/ExceptionUtils.getCauseIfCausedBy (Ljava/lang/Throwable;Ljava/lang/Class;)Ljava/lang/Throwable;
         // 6d: checkcast java/sql/SQLException
         // 70: astore 4
         // 72: aload 4
         // 74: ifnull b3
         // 77: aload 4
         // 79: invokevirtual java/sql/SQLException.getErrorCode ()I
         // 7c: sipush 1317
         // 7f: if_icmpne b3
         // 82: goto 89
         // 85: invokestatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.a (Lorg/springframework/transaction/TransactionException;)Lorg/springframework/transaction/TransactionException;
         // 88: athrow
         // 89: getstatic com/l7tech/server/cluster/ClusterMasterImpl.a Ljava/util/logging/Logger;
         // 8c: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
         // 8f: aload 4
         // 91: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
         // 94: getstatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.f [Ljava/lang/String;
         // 97: bipush 2
         // 98: aaload
         // 99: swap
         // 9a: getstatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.f [Ljava/lang/String;
         // 9d: bipush 1
         // 9e: aaload
         // 9f: 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" ]
         // a4: aload 4
         // a6: invokestatic com/l7tech/util/ExceptionUtils.getDebugException (Ljava/lang/Throwable;)Ljava/lang/Throwable;
         // a9: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
         // ac: goto c7
         // af: invokestatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.a (Lorg/springframework/transaction/TransactionException;)Lorg/springframework/transaction/TransactionException;
         // b2: athrow
         // b3: getstatic com/l7tech/server/cluster/ClusterMasterImpl.a Ljava/util/logging/Logger;
         // b6: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
         // b9: getstatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.f [Ljava/lang/String;
         // bc: astore 5
         // be: aload 5
         // c0: bipush 8
         // c2: aaload
         // c3: aload 3
         // c4: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
         // c7: iload 1
         // c8: aload 0
         // c9: getfield com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.d Ljava/util/concurrent/atomic/AtomicBoolean;
         // cc: invokevirtual java/util/concurrent/atomic/AtomicBoolean.get ()Z
         // cf: if_icmpeq fb
         // d2: iload 1
         // d3: ifeq ef
         // d6: goto dd
         // d9: invokestatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.a (Lorg/springframework/transaction/TransactionException;)Lorg/springframework/transaction/TransactionException;
         // dc: athrow
         // dd: getstatic com/l7tech/server/cluster/ClusterMasterImpl.a Ljava/util/logging/Logger;
         // e0: getstatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.f [Ljava/lang/String;
         // e3: bipush 4
         // e4: aaload
         // e5: invokevirtual java/util/logging/Logger.info (Ljava/lang/String;)V
         // e8: goto fb
         // eb: invokestatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.a (Lorg/springframework/transaction/TransactionException;)Lorg/springframework/transaction/TransactionException;
         // ee: athrow
         // ef: getstatic com/l7tech/server/cluster/ClusterMasterImpl.a Ljava/util/logging/Logger;
         // f2: getstatic com/l7tech/server/cluster/ClusterMasterImpl$MasterCheckTask.f [Ljava/lang/String;
         // f5: bipush 6
         // f7: aaload
         // f8: invokevirtual java/util/logging/Logger.info (Ljava/lang/String;)V
         // fb: return
         // try (18 -> 25): 26 org/springframework/transaction/TransactionException
         // try (10 -> 28): 29 org/springframework/transaction/TransactionException
         // try (10 -> 28): 48 org/springframework/dao/DataAccessException
         // try (54 -> 60): 61 org/springframework/transaction/TransactionException
         // try (56 -> 79): 79 org/springframework/transaction/TransactionException
         // try (90 -> 97): 98 org/springframework/transaction/TransactionException
         // try (95 -> 106): 106 org/springframework/transaction/TransactionException
      }

      public boolean updateMasterTimestamp(int var1) {
         try {
            if (1 == this.c.update(f[0], new Object[]{System.currentTimeMillis(), var1 + 1, var1})) {
               return true;
            }
         } catch (TransactionException var2) {
            throw a(var2);
         }

         return false;
      }

      public boolean isMasterStale(long var1) {
         try {
            if (System.currentTimeMillis() - var1 > ClusterMasterImpl.c) {
               return true;
            }
         } catch (TransactionException var3) {
            throw a(var3);
         }

         return false;
      }

      public ClusterMasterImpl.MasterCheckTask.MasterInfo getMasterInfo() {
         return (ClusterMasterImpl.MasterCheckTask.MasterInfo)this.c.queryForObject(f[7], new j(this));
      }

      public boolean becomeMaster(int var1) {
         try {
            if (1 == this.c.update(f[5], new Object[]{this.e, System.currentTimeMillis(), var1 + 1, var1})) {
               return true;
            }
         } catch (TransactionException var2) {
            throw a(var2);
         }

         return false;
      }

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

      static {
         String[] var5 = new String[10];
         int var3 = 0;
         String var2 = "c\u001eR\u0015L\u007fSU\"c'l_\u0001i#w'l_\u0001\u0016\u001dS\u00008N\u001cC-~1|e\u0007_#si'\u0016S@+d'qU\u001d\u000bq6\u0003P\u007f!sn`1jI\u001aY 6i8\u0005\u0002\u0011`\r\u007f b1jH\u0006F:s08\u001d\u001bb<w:k[\u0010B'y:8Y\u001c[#\u007f 8\\\u0012_\"s08\u001d\u0018x!r18W\u0012E:s&8I\u0007W:c'8V\u001cE:8Oc\u001eR\u0015L\u007fSU\"c'l_\u0001i#w'l_\u0001\u0016\u001dS\u00008T\u001cR+\u007f0%\u0005_\u0016:y!{R\u0016R\u0011b=u_N\tb6\"}H\u0000_!xi'\u001a$~\u000bD\u00118L\u0016D=\u007f;v\u001aN\u0016q\u0013x!r18S\u0000\u0016 y#8W\u0012E:s&68e\u000bZ\u0011[nSX!r1q^_\u0016:y!{R\u0016R\u0011b=u__\u00168s&kS\u001cXnp&wWSU\"c'l_\u0001i#w'l_\u0001";
         int var4 = "c\u001eR\u0015L\u007fSU\"c'l_\u0001i#w'l_\u0001\u0016\u001dS\u00008N\u001cC-~1|e\u0007_#si'\u0016S@+d'qU\u001d\u000bq6\u0003P\u007f!sn`1jI\u001aY 6i8\u0005\u0002\u0011`\r\u007f b1jH\u0006F:s08\u001d\u001bb<w:k[\u0010B'y:8Y\u001c[#\u007f 8\\\u0012_\"s08\u001d\u0018x!r18W\u0012E:s&8I\u0007W:c'8V\u001cE:8Oc\u001eR\u0015L\u007fSU\"c'l_\u0001i#w'l_\u0001\u0016\u001dS\u00008T\u001cR+\u007f0%\u0005_\u0016:y!{R\u0016R\u0011b=u_N\tb6\"}H\u0000_!xi'\u001a$~\u000bD\u00118L\u0016D=\u007f;v\u001aN\u0016q\u0013x!r18S\u0000\u0016 y#8W\u0012E:s&68e\u000bZ\u0011[nSX!r1q^_\u0016:y!{R\u0016R\u0011b=u__\u00168s&kS\u001cXnp&wWSU\"c'l_\u0001i#w'l_\u0001"
            .length();
         char var1 = 'E';
         int var7 = -1;

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

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

                     var2 = "B\rU\n[+2u\u0010D\u0000Zx+i\u0018\u0007\bHx6b\r\u0007\u0016]j6r\f\t\u0002 Q";
                     var4 = "B\rU\n[+2u\u0010D\u0000Zx+i\u0018\u0007\bHx6b\r\u0007\u0016]j6r\f\t\u0002 Q".length();
                     var1 = 31;
                     var7 = -1;
               }

               var10000 = 22;
               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] ^ 84);
         }

         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 -> 17;
               case 1 -> 105;
               case 2 -> 49;
               case 3 -> 115;
               case 4 -> 63;
               case 5 -> 29;
               default -> 84;
            });
         }

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

      private static class MasterInfo extends Triple<String, Long, Integer> {
         static final long serialVersionUID = -8226327523357831605L;

         MasterInfo(String var1, Long var2, Integer var3) {
            super(var1, var2, var3);
         }

         public String getMasterNodeId() {
            return (String)this.left;
         }

         public long getTimestamp() {
            return (Long)this.middle;
         }

         public int getVersion() {
            return (Integer)this.right;
         }
      }
   }
}
