package dev.hawk22e.core.client;

import com.google.gson.JsonObject;
import dev.virel.obf.11ll;
import dev.virel.obf.1IlI;
import dev.virel.obf.IIII;
import dev.virel.obf.IIIIl;
import dev.virel.obf.IIi1;
import dev.virel.obf.Ii11i;
import dev.virel.obf.IiiIi;
import dev.virel.obf.Ilii1;
import dev.virel.obf.IllIi;
import dev.virel.obf.iIl;
import dev.virel.obf.l;
import dev.virel.obf.li;
import java.util.concurrent.ThreadLocalRandom;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.class_1268;
import net.minecraft.class_1269;
import net.minecraft.class_1657;
import net.minecraft.class_1792;
import net.minecraft.class_1799;
import net.minecraft.class_1802;
import net.minecraft.class_2246;
import net.minecraft.class_2338;
import net.minecraft.class_2350;
import net.minecraft.class_239;
import net.minecraft.class_243;
import net.minecraft.class_2680;
import net.minecraft.class_310;
import net.minecraft.class_3965;
import net.minecraft.class_239.class_240;

@Environment(EnvType.CLIENT)
public final class aaaaarc extends Ii11i {
   private static final int HOTBAR_SIZE = 9;
   private static final double BLOCK_REACH = (double)4.5F;
   private static final double BLOCK_REACH_SQUARED = (double)20.25F;
   private static final double RAIL_TOP_HEIGHT = (double)0.125F;
   private static final long RETRY_DELAY_MS = 50L;
   private static final int SILENT_BLOCK_DISPATCH_TICKS = 1;
   private static final int MAX_RAIL_CHECK_RETRIES = 20;
   private static final String LEGACY_DELAY = iIl.interface l11I("vJFYnQA=");
   private final l switchDelay = (l)this.private iI((new l(iIl.interface l11I("q4NdiBpfEDiSBJ5A"), (double)0.0F, (double)0.0F, (double)0.0F, (double)300.0F, (double)5.0F)).float Ii(iIl.interface l11I("lYc=")));
   private final l cartDelay = (l)this.private iI((new l(iIl.interface l11I("u5VGiFlnXB2UDd99Ct/fhw=="), (double)0.0F, (double)0.0F, (double)0.0F, (double)300.0F, (double)5.0F)).float Ii(iIl.interface l11I("lYc=")));
   private final Ilii1 switchBack = (Ilii1)this.private iI(new Ilii1(iIl.interface l11I("q4NdiBpfED6WC5Q="), true));
   private int pendingRailPlacementTick = Integer.MIN_VALUE;
   private long pendingRailDispatchSerial = Long.MIN_VALUE;
   private class_3965 pendingRailHit;
   private int originalSlot = -1;
   private class_2338 scheduledRailPos;
   private int scheduledRestoreSlot = -1;
   private int scheduledCartSlot = -1;
   private boolean scheduledCartSlotPrepared;
   private IIIIl scheduledCartSlotAction;
   private long scheduledPlacementAtMs;
   private int scheduledDispatchTick = Integer.MIN_VALUE;
   private int scheduledRestoreTick = Integer.MIN_VALUE;
   private boolean internalPlacement;
   private boolean scheduledInteractionDispatched;
   private int railCheckRetries;

   public aaaaarc() {
      super(iIl.interface l11I("vpVHiDpWQgg="), IllIi.iI1llI, iIl.interface l11I("qJhVnxxEEB3XBZZXCtDfjIzUVZoNUkJcjgeKGR/f352d1FXcC1ZZENk="));
   }

   public String switch_iIII/* $FF was: switch iIII*/() {
      String var1 = this.native iiiI();
      return var1 != null && !var1.isBlank() ? this.interface iIii() + iIl.interface l11I("2A==") + var1 : this.interface iIii();
   }

   public String native_iiiI/* $FF was: native iiiI*/() {
      return null;
   }

   public void enum_ii1/* $FF was: enum ii1*/(JsonObject var1) {
      super.enum ii1(var1);
      this.protected iI(var1, LEGACY_DELAY, new l[]{this.switchDelay, this.cartDelay});
   }

   public void break_ilil/* $FF was: break ilil*/() {
      this.restoreOriginalSlot(class_310.method_1551());
      this.resetCapture();
      this.resetScheduledPlacement();
      this.internalPlacement = false;
   }

   public void public_ili1/* $FF was: public ili1*/() {
      this.tickScheduledMinecart(class_310.method_1551());
   }

   public boolean isInternalPlacement() {
      return this.internalPlacement;
   }

   public void captureRailPlacementAttempt(class_310 var1, class_1268 var2, class_3965 var3) {
      if (this.canCapture(var1, var2, var3)) {
         this.restoreOriginalSlot(var1);
         this.resetCapture();
         this.resetScheduledPlacement();
         this.pendingRailPlacementTick = var1.field_1724.field_6012;
         this.pendingRailDispatchSerial = 1IlI.while i1Il();
         this.pendingRailHit = var3;
         this.originalSlot = 1IlI.static IIiI(var1.field_1724.method_31548());
      }
   }

   public void onRailPlacementResult(class_310 var1, class_1268 var2, class_3965 var3, class_1269 var4) {
      if (this.pendingRailPlacementTick != Integer.MIN_VALUE) {
         try {
            if (this.byte iII1() && !this.internalPlacement && !this.isCartOperationOwnedElsewhere() && var4 != null && var4.method_23665() && var1 != null && var1.field_1724 != null && var1.field_1687 != null && var1.field_1761 != null && var2 == class_1268.field_5808 && var1.field_1724.field_6012 == this.pendingRailPlacementTick && 1IlI.while i1Il() > this.pendingRailDispatchSerial) {
               class_3965 var5 = this.pendingRailHit != null ? this.pendingRailHit : var3;
               class_2338 var6 = this.resolvePlacedRailPosition(var1, var5);
               if (var6 != null) {
                  this.scheduleMinecartPlacement(var6, this.originalSlot);
                  this.tickScheduledMinecart(var1);
               }

               return;
            }
         } finally {
            this.resetCapture();
         }

      }
   }

   private void tickScheduledMinecart(class_310 var1) {
      if (this.scheduledRailPos != null) {
         if (this.isCartOperationOwnedElsewhere()) {
            this.yieldCartOperation(var1);
         } else if (!this.hasContext(var1)) {
            this.restoreOriginalSlot(var1);
            this.resetScheduledPlacement();
         } else if (this.scheduledRestoreTick != Integer.MIN_VALUE) {
            if (var1.field_1724.field_6012 >= this.scheduledRestoreTick) {
               this.restoreOriginalSlot(var1);
               this.resetScheduledPlacement();
            }
         } else if (this.scheduledDispatchTick != Integer.MIN_VALUE) {
            if (var1.field_1724.field_6012 > this.scheduledDispatchTick) {
               this.scheduledDispatchTick = Integer.MIN_VALUE;
               this.scheduledPlacementAtMs = System.currentTimeMillis() + 50L;
            }
         } else if (System.currentTimeMillis() >= this.scheduledPlacementAtMs) {
            class_2338 var2 = this.scheduledRailPos;
            if (!this.isRailBlock(var1.field_1687.method_8320(var2))) {
               this.retryScheduledPlacement(var1);
            } else if (!this.canPlaceMinecartAt(var1, var2)) {
               this.finishScheduledPlacement(var1);
            } else {
               if (this.scheduledCartSlot < 0) {
                  this.scheduledCartSlot = this.findCartSlot(var1.field_1724);
               }

               if (!this.scheduledCartSlotPrepared) {
                  if (this.scheduledCartSlot < 0 || !this.prepareCartSlot(var1, this.scheduledCartSlot)) {
                     this.finishScheduledPlacement(var1);
                     return;
                  }

                  if (this.scheduledCartSlotAction == null || !1IlI.double I1II(var1, this.scheduledCartSlotAction) || this.scheduledCartSlotAction.volatile iiI1() != this.scheduledCartSlot) {
                     boolean var3 = 1IlI.public Iii1(var1) != this.scheduledCartSlot;
                     int var4 = var3 ? this.rollDelayTicks(this.switchDelay) : 0;
                     this.scheduledCartSlotAction = 1IlI.switch IIiI(var1, this, this.scheduledCartSlot, var4, true);
                  }

                  if (!this.scheduledCartSlotAction.static i1Il()) {
                     this.scheduledCartSlotAction = null;
                     this.scheduledPlacementAtMs = System.currentTimeMillis() + 50L;
                     return;
                  }

                  if (!1IlI.strictfp IIiI(var1, this.scheduledCartSlotAction)) {
                     return;
                  }

                  this.scheduledCartSlotAction = null;
                  this.scheduledCartSlotPrepared = true;
               }

               if (this.isLookingAtRail(var1, var2)) {
                  this.finishMinecartInteraction(var1, var2);
               } else {
                  float[] var5 = IiiIi.synchronized IIiI(var1, this.cartHitVec(var2));
                  if (var5 == null) {
                     this.retryScheduledPlacement(var1);
                  } else {
                     this.scheduledDispatchTick = var1.field_1724.field_6012 + 1;
                     boolean var6 = IiiIi.int I1il(var1, 200, var5[0], var5[1], () -> this.finishMinecartInteraction(var1, var2));
                     if (!var6) {
                        this.scheduledDispatchTick = Integer.MIN_VALUE;
                        this.scheduledPlacementAtMs = System.currentTimeMillis() + 50L;
                     }

                  }
               }
            }
         }
      }
   }

   private boolean canCapture(class_310 var1, class_1268 var2, class_3965 var3) {
      return this.byte iII1() && !this.internalPlacement && !this.isCartOperationOwnedElsewhere() && var1 != null && var1.field_1724 != null && var1.field_1687 != null && var1.field_1761 != null && var2 == class_1268.field_5808 && var3 != null && var3.method_17783() == class_240.field_1332 && var3.method_17780() == class_2350.field_11036 && !IIII.enum i1li(var1) && this.isRailItem(var1.field_1724.method_6047());
   }

   private boolean finishMinecartInteraction(class_310 var1, class_2338 var2) {
      this.scheduledDispatchTick = Integer.MIN_VALUE;
      if (this.isCartOperationOwnedElsewhere()) {
         this.yieldCartOperation(var1);
         return false;
      } else if (this.scheduledRailPos != null && this.scheduledRailPos.equals(var2) && !this.scheduledInteractionDispatched && this.canPlaceMinecartAt(var1, var2) && this.isLookingAtRail(var1, var2) && this.scheduledCartSlot >= 0 && this.isMinecartItem(var1.field_1724.method_31548().method_5438(this.scheduledCartSlot))) {
         class_3965 var3 = new class_3965(this.cartHitVec(var2), class_2350.field_11036, var2, false);
         if (1IlI.public Iii1(var1) != this.scheduledCartSlot) {
            this.retryScheduledPlacement(var1);
            return false;
         } else {
            long var4 = 1IlI.while i1Il();
            boolean var6 = 1IlI.interface i1ii();
            if (!var6) {
               this.retryScheduledPlacement(var1);
               return false;
            } else {
               class_1269 var7;
               try {
                  this.internalPlacement = true;

                  try {
                     var7 = var1.field_1761.method_2896(var1.field_1724, class_1268.field_5808, var3);
                  } finally {
                     this.internalPlacement = false;
                  }
               } finally {
                  1IlI.strictfp i1ll();
               }

               if (var7 != null && var7.method_23665()) {
                  var1.field_1724.method_6104(class_1268.field_5808);
               }

               this.scheduledInteractionDispatched = 1IlI.while i1Il() != var4;
               if (!this.scheduledInteractionDispatched) {
                  this.retryScheduledPlacement(var1);
                  return false;
               } else {
                  this.finishScheduledPlacement(var1);
                  return true;
               }
            }
         }
      } else {
         this.retryScheduledPlacement(var1);
         return false;
      }
   }

   private boolean isCartOperationOwnedElsewhere() {
      aaaaady var1 = aaaaady.get();
      if (var1 != null && var1.modules() != null) {
         li var2 = var1.modules().synchronized iI();
         if (var2 != null && var2.strictfp II11l()) {
            return true;
         } else {
            11ll var3 = var1.modules().transient iI();
            return var3 != null && var3.for Ii1lI();
         }
      } else {
         return false;
      }
   }

   private void yieldCartOperation(class_310 var1) {
      this.restoreOriginalSlot(var1);
      this.resetCapture();
      this.resetScheduledPlacement();
      this.internalPlacement = false;
   }

   private class_2338 resolvePlacedRailPosition(class_310 var1, class_3965 var2) {
      if (var1 != null && var1.field_1687 != null && var2 != null) {
         class_2338 var3 = var2.method_17777();
         class_2338 var4 = var3.method_10093(var2.method_17780());
         if (this.isRailBlock(var1.field_1687.method_8320(var4))) {
            return var4.method_10062();
         } else {
            return this.isRailBlock(var1.field_1687.method_8320(var3)) ? var3.method_10062() : var4.method_10062();
         }
      } else {
         return null;
      }
   }

   private boolean isRailItem(class_1799 var1) {
      return var1 != null && !var1.method_7960() && (var1.method_31574(class_1802.field_8129) || var1.method_31574(class_1802.field_8848) || var1.method_31574(class_1802.field_8211) || var1.method_31574(class_1802.field_8655));
   }

   private boolean isRailBlock(class_2680 var1) {
      return var1 != null && (var1.method_27852(class_2246.field_10167) || var1.method_27852(class_2246.field_10425) || var1.method_27852(class_2246.field_10025) || var1.method_27852(class_2246.field_10546));
   }

   private boolean isMinecartItem(class_1799 var1) {
      return var1 != null && !var1.method_7960() && var1.method_31574(class_1802.field_8069);
   }

   private boolean canPlaceMinecartAt(class_310 var1, class_2338 var2) {
      return this.hasContext(var1) && var2 != null && this.isRailBlock(var1.field_1687.method_8320(var2)) && var1.field_1724.method_33571().method_1025(this.cartHitVec(var2)) <= (double)20.25F;
   }

   private boolean isLookingAtRail(class_310 var1, class_2338 var2) {
      if (this.hasContext(var1) && var2 != null) {
         class_239 var3 = var1.field_1724.method_5745((double)4.5F, 1.0F, false);
         boolean var10000;
         if (var3 instanceof class_3965) {
            class_3965 var4 = (class_3965)var3;
            if (var4.method_17783() == class_240.field_1332 && var4.method_17777().equals(var2) && var4.method_17780() == class_2350.field_11036 && this.isRailBlock(var1.field_1687.method_8320(var2))) {
               var10000 = true;
               return var10000;
            }
         }

         var10000 = false;
         return var10000;
      } else {
         return false;
      }
   }

   private class_243 cartHitVec(class_2338 var1) {
      return class_243.method_24955(var1).method_1031((double)0.0F, (double)0.125F, (double)0.0F);
   }

   private int findCartSlot(class_1657 var1) {
      return this.findItemSlot(var1, class_1802.field_8069);
   }

   private int findItemSlot(class_1657 var1, class_1792 var2) {
      for(int var3 = 0; var3 < 9; ++var3) {
         class_1799 var4 = var1.method_31548().method_5438(var3);
         if (var4.method_31574(var2)) {
            return var3;
         }
      }

      return -1;
   }

   private boolean prepareCartSlot(class_310 var1, int var2) {
      return var1 != null && var1.field_1724 != null && var2 >= 0 && var2 < 9 && !IIII.enum i1li(var1) ? this.isMinecartItem(var1.field_1724.method_31548().method_5438(var2)) : false;
   }

   private void scheduleMinecartPlacement(class_2338 var1, int var2) {
      this.scheduledRailPos = var1.method_10062();
      this.scheduledRestoreSlot = var2;
      this.scheduledCartSlot = -1;
      this.scheduledCartSlotPrepared = false;
      this.scheduledCartSlotAction = null;
      this.railCheckRetries = 0;
      this.scheduledDispatchTick = Integer.MIN_VALUE;
      this.scheduledRestoreTick = Integer.MIN_VALUE;
      this.scheduledInteractionDispatched = false;
      this.scheduledPlacementAtMs = System.currentTimeMillis() + this.rollDelayMs(this.cartDelay);
   }

   private void retryScheduledPlacement(class_310 var1) {
      ++this.railCheckRetries;
      if (this.railCheckRetries > 20) {
         this.finishScheduledPlacement(var1);
      } else {
         this.scheduledPlacementAtMs = System.currentTimeMillis() + 50L;
      }
   }

   private void finishScheduledPlacement(class_310 var1) {
      if ((Boolean)this.switchBack.break Ii() && this.scheduledRestoreSlot >= 0 && this.scheduledRestoreSlot < 9 && this.scheduledRestoreSlot != this.scheduledCartSlot) {
         this.scheduledRestoreTick = var1.field_1724.field_6012 + 1;
      } else {
         this.resetScheduledPlacement();
      }
   }

   private void restoreOriginalSlot(class_310 var1) {
      int var2 = this.scheduledRestoreSlot >= 0 ? this.scheduledRestoreSlot : this.originalSlot;
      if (var1 != null && var1.field_1724 != null) {
         if ((Boolean)this.switchBack.break Ii() && var2 >= 0 && var2 < 9) {
            1IlI.break IIiI(var1, this, var2);
         } else {
            1IlI.synchronized IIiI(var1, this, IIi1.ill1i1);
         }

      }
   }

   private boolean hasContext(class_310 var1) {
      return this.byte iII1() && var1 != null && var1.field_1724 != null && var1.field_1687 != null && var1.field_1761 != null && var1.field_1724.method_5805();
   }

   private long rollDelayMs(l var1) {
      double var2 = var1.break I1l();
      double var4 = var1.return I11();
      return var2 >= var4 ? Math.max(0L, Math.round(var2)) : Math.max(0L, Math.round(ThreadLocalRandom.current().nextDouble(var2, var4)));
   }

   private int rollDelayTicks(l var1) {
      return Math.max(0, (int)Math.ceil((double)this.rollDelayMs(var1) / (double)50.0F));
   }

   private void resetCapture() {
      this.pendingRailPlacementTick = Integer.MIN_VALUE;
      this.pendingRailDispatchSerial = Long.MIN_VALUE;
      this.pendingRailHit = null;
      this.originalSlot = -1;
   }

   private void resetScheduledPlacement() {
      this.scheduledRailPos = null;
      this.scheduledRestoreSlot = -1;
      this.scheduledCartSlot = -1;
      this.scheduledCartSlotPrepared = false;
      this.scheduledCartSlotAction = null;
      this.scheduledPlacementAtMs = 0L;
      this.scheduledDispatchTick = Integer.MIN_VALUE;
      this.scheduledRestoreTick = Integer.MIN_VALUE;
      this.scheduledInteractionDispatched = false;
      this.railCheckRetries = 0;
   }
}
