package net.fabricmc.fabric.mixin.client.rendering;

import com.google.common.collect.ImmutableMap;
import com.llamalad7.mixinextras.sugar.Local;
import java.util.Map;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
import net.fabricmc.fabric.impl.client.rendering.EntityModelLayerImpl;
import net.minecraft.class_11677;
import net.minecraft.class_5600;
import net.minecraft.class_5601;
import net.minecraft.class_5607;
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.CallbackInfoReturnable;

@Environment(EnvType.CLIENT)
@Mixin({class_5600.class})
abstract class EntityModelsMixin {
   @Inject(
      method = {"method_32073()Ljava/util/Map;"},
      at = {@At(
   value = "INVOKE",
   target = "Lcom/google/common/collect/ImmutableMap$Builder;build()Lcom/google/common/collect/ImmutableMap;"
)}
   )
   private static void registerExtraModelData(CallbackInfoReturnable<Map<class_5601, class_5607>> info, @Local ImmutableMap.Builder<class_5601, class_5607> builder) {
      for(Map.Entry<class_5601, EntityModelLayerRegistry.TexturedModelDataProvider> entry : EntityModelLayerImpl.PROVIDERS.entrySet()) {
         builder.put((class_5601)entry.getKey(), ((EntityModelLayerRegistry.TexturedModelDataProvider)entry.getValue()).createModelData());
      }

      for(Map.Entry<class_11677<class_5601>, EntityModelLayerRegistry.TexturedEquipmentModelDataProvider> entry : EntityModelLayerImpl.EQUIPMENT_PROVIDERS.entrySet()) {
         ((class_11677)entry.getKey()).method_72960(((EntityModelLayerRegistry.TexturedEquipmentModelDataProvider)entry.getValue()).createEquipmentModelData(), builder);
      }

   }
}
