package com.l7tech.common.io.failover;

import java.lang.reflect.Constructor;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class FailoverStrategyFactory {
   private static final String[] a;
   public static final OrderedStickyFailoverStrategy<?> ORDERED;
   public static final StickyFailoverStrategy<?> STICKY;
   public static final RoundRobinFailoverStrategy<?> ROBIN;
   public static final RandomFailoverStrategy<?> RANDOM;
   public final ConcurrentMap<String, FailoverStrategy> strategies = new ConcurrentHashMap<>();
   private static final FailoverStrategy[] b;
   private static final String[] c;

   public static FailoverStrategy[] getFailoverStrategyNames() {
      return b;
   }

   public <ST> void registerStrategy(FailoverStrategy var1) {
      this.strategies.put(var1.getName(), var1);
   }

   public <ST> void unregisterStrategy(FailoverStrategy var1) {
      this.strategies.remove(var1.getName());
   }

   public FailoverStrategy[] getAllFailoverStrategy() {
      FailoverStrategy[] var1 = new FailoverStrategy[getFailoverStrategyNames().length + this.strategies.size()];
      System.arraycopy(getFailoverStrategyNames(), 0, var1, 0, getFailoverStrategyNames().length);
      TreeMap var2 = new TreeMap();

      for (Object var4 : this.strategies.keySet()) {
         var2.put((String)var4, this.strategies.get(var4));
      }

      System.arraycopy(var2.values().toArray(new FailoverStrategy[this.strategies.size()]), 0, var1, getFailoverStrategyNames().length, this.strategies.size());
      return var1;
   }

   public static <ST> FailoverStrategy<ST> createFailoverStrategy(String var0, ST[] var1) {
      try {
         if (ORDERED.getName().equalsIgnoreCase(var0)) {
            return new OrderedStickyFailoverStrategy<>((ST[])var1);
         }
      } catch (IllegalArgumentException var3) {
         throw a(var3);
      }

      try {
         if (STICKY.getName().equalsIgnoreCase(var0)) {
            return new StickyFailoverStrategy<>((ST[])var1);
         }
      } catch (IllegalArgumentException var5) {
         throw a(var5);
      }

      try {
         if (ROBIN.getName().equalsIgnoreCase(var0)) {
            return new RoundRobinFailoverStrategy<>((ST[])var1);
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      try {
         if (RANDOM.getName().equalsIgnoreCase(var0)) {
            return new RandomFailoverStrategy<>((ST[])var1);
         }
      } catch (IllegalArgumentException var4) {
         throw a(var4);
      }

      throw new IllegalArgumentException(c[0] + var0);
   }

   public <ST> FailoverStrategy<ST> createFailoverStrategy(String param1, ST[] param2, Map param3) {
      // $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: aconst_null
      // 01: astore 4
      // 03: aload 0
      // 04: getfield com/l7tech/common/io/failover/FailoverStrategyFactory.strategies Ljava/util/concurrent/ConcurrentMap;
      // 07: aload 1
      // 08: invokeinterface java/util/concurrent/ConcurrentMap.get (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 0d: checkcast com/l7tech/common/io/failover/FailoverStrategy
      // 10: astore 4
      // 12: aload 4
      // 14: ifnonnull 7d
      // 17: getstatic com/l7tech/common/io/failover/FailoverStrategyFactory.ORDERED Lcom/l7tech/common/io/failover/OrderedStickyFailoverStrategy;
      // 1a: invokevirtual com/l7tech/common/io/failover/OrderedStickyFailoverStrategy.getName ()Ljava/lang/String;
      // 1d: aload 1
      // 1e: invokevirtual java/lang/String.equalsIgnoreCase (Ljava/lang/String;)Z
      // 21: ifeq 35
      // 24: goto 2b
      // 27: invokestatic com/l7tech/common/io/failover/FailoverStrategyFactory.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
      // 2a: athrow
      // 2b: new com/l7tech/common/io/failover/OrderedStickyFailoverStrategy
      // 2e: dup
      // 2f: aload 2
      // 30: invokespecial com/l7tech/common/io/failover/OrderedStickyFailoverStrategy.<init> ([Ljava/lang/Object;)V
      // 33: astore 4
      // 35: getstatic com/l7tech/common/io/failover/FailoverStrategyFactory.STICKY Lcom/l7tech/common/io/failover/StickyFailoverStrategy;
      // 38: invokevirtual com/l7tech/common/io/failover/StickyFailoverStrategy.getName ()Ljava/lang/String;
      // 3b: aload 1
      // 3c: invokevirtual java/lang/String.equalsIgnoreCase (Ljava/lang/String;)Z
      // 3f: ifeq 4c
      // 42: new com/l7tech/common/io/failover/StickyFailoverStrategy
      // 45: dup
      // 46: aload 2
      // 47: invokespecial com/l7tech/common/io/failover/StickyFailoverStrategy.<init> ([Ljava/lang/Object;)V
      // 4a: astore 4
      // 4c: getstatic com/l7tech/common/io/failover/FailoverStrategyFactory.ROBIN Lcom/l7tech/common/io/failover/RoundRobinFailoverStrategy;
      // 4f: invokevirtual com/l7tech/common/io/failover/RoundRobinFailoverStrategy.getName ()Ljava/lang/String;
      // 52: aload 1
      // 53: invokevirtual java/lang/String.equalsIgnoreCase (Ljava/lang/String;)Z
      // 56: ifeq 63
      // 59: new com/l7tech/common/io/failover/RoundRobinFailoverStrategy
      // 5c: dup
      // 5d: aload 2
      // 5e: invokespecial com/l7tech/common/io/failover/RoundRobinFailoverStrategy.<init> ([Ljava/lang/Object;)V
      // 61: astore 4
      // 63: getstatic com/l7tech/common/io/failover/FailoverStrategyFactory.RANDOM Lcom/l7tech/common/io/failover/RandomFailoverStrategy;
      // 66: invokevirtual com/l7tech/common/io/failover/RandomFailoverStrategy.getName ()Ljava/lang/String;
      // 69: aload 1
      // 6a: invokevirtual java/lang/String.equalsIgnoreCase (Ljava/lang/String;)Z
      // 6d: ifeq 8b
      // 70: new com/l7tech/common/io/failover/RandomFailoverStrategy
      // 73: dup
      // 74: aload 2
      // 75: invokespecial com/l7tech/common/io/failover/RandomFailoverStrategy.<init> ([Ljava/lang/Object;)V
      // 78: astore 4
      // 7a: goto 8b
      // 7d: aload 0
      // 7e: aload 4
      // 80: invokeinterface com/l7tech/common/io/failover/FailoverStrategy.getClass ()Ljava/lang/Class; 1
      // 85: aload 2
      // 86: invokevirtual com/l7tech/common/io/failover/FailoverStrategyFactory.a (Ljava/lang/Class;[Ljava/lang/Object;)Lcom/l7tech/common/io/failover/FailoverStrategy;
      // 89: astore 4
      // 8b: aload 4
      // 8d: ifnull b4
      // 90: aload 4
      // 92: instanceof com/l7tech/common/io/failover/ConfigurableFailoverStrategy
      // 95: ifeq b1
      // 98: goto 9f
      // 9b: invokestatic com/l7tech/common/io/failover/FailoverStrategyFactory.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
      // 9e: athrow
      // 9f: aload 4
      // a1: checkcast com/l7tech/common/io/failover/ConfigurableFailoverStrategy
      // a4: aload 3
      // a5: invokeinterface com/l7tech/common/io/failover/ConfigurableFailoverStrategy.setProperties (Ljava/util/Map;)V 2
      // aa: goto b1
      // ad: invokestatic com/l7tech/common/io/failover/FailoverStrategyFactory.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
      // b0: athrow
      // b1: aload 4
      // b3: areturn
      // b4: new java/lang/IllegalArgumentException
      // b7: dup
      // b8: aload 1
      // b9: getstatic com/l7tech/common/io/failover/FailoverStrategyFactory.c [Ljava/lang/String;
      // bc: bipush 1
      // bd: aaload
      // be: swap
      // bf: invokedynamic makeConcatWithConstants (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" ]
      // c4: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
      // c7: athrow
      // try (8 -> 15): 16 java/lang/IllegalArgumentException
      // try (60 -> 65): 66 java/lang/IllegalArgumentException
      // try (62 -> 72): 73 java/lang/IllegalArgumentException
   }

   private <ST> FailoverStrategy<ST> a(Class var1, ST[] var2) {
      try {
         Constructor var3 = var1.getConstructors()[0];
         return (FailoverStrategy<ST>)var3.newInstance((Object)var2);
      } catch (Exception var4) {
         throw new IllegalArgumentException(var4);
      }
   }

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "2\u001aX\u001af\u0019\u001aG\u0012R\u001de\u0001\u0002\u0002\u0006\u0013\u0007}\u001c\u0015\u0013\u0011T\r)\u0000\u0015\n\u0011\tT 2\u001aX\u001af\u0019\u001aG\u0012R\u001de\u0001\u0002\u0002\u0006\u0013\u0007}\u001c\u0015\u0013\u0011T\r)\u0000\u0015\n\u0011\tT";
      int var4 = "2\u001aX\u001af\u0019\u001aG\u0012R\u001de\u0001\u0002\u0002\u0006\u0013\u0007}\u001c\u0015\u0013\u0011T\r)\u0000\u0015\n\u0011\tT 2\u001aX\u001af\u0019\u001aG\u0012R\u001de\u0001\u0002\u0002\u0006\u0013\u0007}\u001c\u0015\u0013\u0011T\r)\u0000\u0015\n\u0011\tT"
         .length();
      char var1 = ' ';
      int var0 = -1;

      while (true) {
         String var10002 = a(90, a(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            c = var5;
            a = new String[]{"a", "b", "c"};
            ORDERED = new OrderedStickyFailoverStrategy<>(a);
            STICKY = new StickyFailoverStrategy<>(a);
            ROBIN = new RoundRobinFailoverStrategy<>(a);
            RANDOM = new RandomFailoverStrategy<>(a);
            b = new FailoverStrategy[]{ORDERED, STICKY, ROBIN};
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

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

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

      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 -> 61;
            case 1 -> 46;
            case 2 -> 105;
            case 3 -> 46;
            case 4 -> 83;
            case 5 -> 52;
            default -> 46;
         });
      }

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