package net.fabricmc.fabric.impl.renderer;

import java.util.List;
import java.util.function.Predicate;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
import net.fabricmc.fabric.api.renderer.v1.mesh.ShadeMode;
import net.fabricmc.fabric.api.renderer.v1.model.ModelHelper;
import net.fabricmc.fabric.api.util.TriState;
import net.minecraft.class_10889;
import net.minecraft.class_2350;
import net.minecraft.class_777;
import org.jetbrains.annotations.Nullable;

@Environment(EnvType.CLIENT)
public class VanillaBlockModelPartEncoder {
   public static void emitQuads(class_10889 part, QuadEmitter emitter, Predicate<@Nullable class_2350> cullTest) {
      TriState ao = part.comp_3751() ? TriState.DEFAULT : TriState.FALSE;

      for(int i = 0; i <= 6; ++i) {
         class_2350 cullFace = ModelHelper.faceFromIndex(i);
         if (!cullTest.test(cullFace)) {
            List<class_777> quads = part.method_68509(cullFace);
            int quadCount = quads.size();

            for(int j = 0; j < quadCount; ++j) {
               class_777 q = (class_777)quads.get(j);
               emitter.cullFace(cullFace);
               emitter.fromBakedQuad(q);
               emitter.ambientOcclusion(ao);
               emitter.shadeMode(ShadeMode.VANILLA);
               emitter.emit();
            }
         }
      }

   }
}
