package dev.hawk22e.core.client.mixin;

import dev.hawk22e.core.client.aaaaady;
import dev.virel.obf.I1l;
import dev.virel.obf.IiiIi;
import dev.virel.obf.i1ii;
import dev.virel.obf.iIl;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.class_10055;
import net.minecraft.class_11659;
import net.minecraft.class_11890;
import net.minecraft.class_12075;
import net.minecraft.class_1297;
import net.minecraft.class_310;
import net.minecraft.class_4587;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Environment(EnvType.CLIENT)
@Mixin(
   targets = {"net/minecraft/class_1007"}
)
public abstract class aaaaadd {
   @Inject(
      method = {"method_62604"},
      at = {@At("TAIL")},
      require = 0
   )
   private void ilovcats$applyLocalServerRotationPose(class_11890 var1, class_10055 var2, float var3, CallbackInfo var4) {
      class_310 var5 = class_310.method_1551();
      aaaaady var6 = aaaaady.get();
      I1l var7 = var6 != null && var6.modules() != null ? var6.modules().transient iI() : null;
      if (var5 != null && var1 == var5.field_1724 && var7 != null && var7.byte iII1()) {
         IiiIi.public IIiI(var5, var2, var3);
      }
   }

   @Inject(
      method = {"method_4213"},
      at = {@At("HEAD")},
      cancellable = true,
      require = 0
   )
   private void ilovcats$suppressDefaultPlayerLabels(class_10055 var1, class_4587 var2, class_11659 var3, class_12075 var4, CallbackInfo var5) {
      if (i1ii.protected II1i()) {
         class_1297 var6 = ilovcats$resolveEntity(var1);
         if (var6 != null && i1ii.private IIiI(var6)) {
            var5.cancel();
         }
      }
   }

   private static class_1297 ilovcats$resolveEntity(class_10055 var0) {
      if (var0 == null) {
         return null;
      } else {
         class_1297 var1 = ilovcats$extractDirectEntity(var0);
         if (var1 != null) {
            return var1;
         } else {
            Integer var2 = ilovcats$extractEntityId(var0);
            if (var2 == null) {
               return null;
            } else {
               class_310 var3 = class_310.method_1551();
               return var3 != null && var3.field_1687 != null ? var3.field_1687.method_8469(var2) : null;
            }
         }
      }
   }

   private static class_1297 ilovcats$extractDirectEntity(Object var0) {
      for(Field var2 : ilovcats$getAllFields(var0.getClass())) {
         if (class_1297.class.isAssignableFrom(var2.getType())) {
            try {
               var2.setAccessible(true);
               Object var3 = var2.get(var0);
               if (var3 instanceof class_1297) {
                  class_1297 var4 = (class_1297)var3;
                  return var4;
               }
            } catch (ReflectiveOperationException var5) {
            }
         }
      }

      return null;
   }

   private static Integer ilovcats$extractEntityId(Object var0) {
      class_310 var1 = class_310.method_1551();
      if (var1 == null) {
         return null;
      } else {
         ArrayList var2 = new ArrayList();

         for(Field var4 : ilovcats$getAllFields(var0.getClass())) {
            Class var5 = var4.getType();
            if (var5 == Integer.TYPE || var5 == Integer.class) {
               try {
                  var4.setAccessible(true);
                  Object var6 = var4.get(var0);
                  if (var6 instanceof Integer) {
                     Integer var7 = (Integer)var6;
                     if (var7 >= 0) {
                        String var8 = var4.getName().toLowerCase();
                        if ((var8.equals(iIl.interface l11I("kZA=")) || var8.contains(iIl.interface l11I("nZpAlQ1OWRg=")) || var8.contains(iIl.interface l11I("nZpAlQ1ObxWT"))) && (var1.field_1687 == null || var1.field_1687.method_8469(var7) != null)) {
                           return var7;
                        }

                        var2.add(var7);
                     }
                  }
               } catch (ReflectiveOperationException var9) {
               }
            }
         }

         if (var1.field_1687 != null) {
            for(Integer var11 : var2) {
               if (var1.field_1687.method_8469(var11) != null) {
                  return var11;
               }
            }
         }

         if (!var2.isEmpty()) {
            return (Integer)var2.get(0);
         } else {
            return null;
         }
      }
   }

   private static List<Field> ilovcats$getAllFields(Class<?> var0) {
      ArrayList var1 = new ArrayList();

      for(Class var2 = var0; var2 != null && var2 != Object.class; var2 = var2.getSuperclass()) {
         Field[] var3 = var2.getDeclaredFields();

         for(Field var7 : var3) {
            var1.add(var7);
         }
      }

      return var1;
   }
}
