package net.vulkanmod.mixin.render;

import com.mojang.blaze3d.buffers.GpuBuffer;
import com.mojang.blaze3d.systems.RenderPass;
import com.mojang.blaze3d.textures.GpuTextureView;
import com.mojang.blaze3d.vertex.VertexFormat;
import com.mojang.blaze3d.vertex.VertexFormat.class_5596;
import net.minecraft.class_10799;
import net.minecraft.class_11228;
import net.minecraft.class_11231;
import net.minecraft.class_11241;
import net.minecraft.class_11245;
import net.minecraft.class_11246;
import net.minecraft.class_8030;
import net.vulkanmod.render.engine.VkRenderPass;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;

@Mixin({class_11228.class})
public abstract class GuiRendererMixin {
   @Shadow
   @Final
   private class_11246 field_59914;
   @Shadow
   private @Nullable GpuTextureView field_60571;

   @Overwrite
   private void method_70887(class_11245 guiItemRenderState, float u, float v, int size, int atlasSize) {
      v = 1.0F - v;
      float u1 = u + (float)size / (float)atlasSize;
      float v1 = v + (float)size / (float)atlasSize;
      this.field_59914.method_71996(new class_11241(class_10799.field_59968, class_11231.method_70900(this.field_60571), guiItemRenderState.method_72120(), guiItemRenderState.method_72122(), guiItemRenderState.method_72123(), guiItemRenderState.method_72122() + 16, guiItemRenderState.method_72123() + 16, u, u1, v, v1, -1, guiItemRenderState.method_72124(), (class_8030)null));
   }

   @Redirect(
      method = {"method_70886"},
      at = @At(
   value = "INVOKE",
   target = "Lcom/mojang/blaze3d/systems/RenderPass;setIndexBuffer(Lcom/mojang/blaze3d/buffers/GpuBuffer;Lcom/mojang/blaze3d/vertex/VertexFormat$class_5595;)V"
)
   )
   private void removeIndexBuffer(RenderPass instance, GpuBuffer gpuBuffer, VertexFormat.class_5595 indexType) {
   }

   @Redirect(
      method = {"method_70886"},
      at = @At(
   value = "INVOKE",
   target = "Lcom/mojang/blaze3d/systems/RenderPass;drawIndexed(IIII)V"
)
   )
   private void useVertexCount(RenderPass renderPass, int baseVertex, int firstIndex, int indexCount, int instanceCount) {
      VkRenderPass vkRenderPass = (VkRenderPass)renderPass;
      if (vkRenderPass.getPipeline().getVertexFormatMode() != class_5596.field_27379) {
         int vertexCount = indexCount * 2 / 3;
         renderPass.drawIndexed(baseVertex, 0, vertexCount, 1);
      } else {
         renderPass.drawIndexed(baseVertex, 0, indexCount, 1);
      }

   }
}
