package net.fabricmc.fabric.api.renderer.v1.model;

import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import java.util.List;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh;
import net.minecraft.class_10725;
import net.minecraft.class_2350;
import net.minecraft.class_310;
import net.minecraft.class_777;
import org.jetbrains.annotations.Nullable;

@Environment(EnvType.CLIENT)
public final class ModelHelper {
   private static final class_2350[] FACES = (class_2350[])Arrays.copyOf(class_2350.values(), 7);
   public static final int NULL_FACE_ID = 6;

   private ModelHelper() {
   }

   public static int toFaceIndex(@Nullable class_2350 face) {
      return face == null ? 6 : face.method_10146();
   }

   public static @Nullable class_2350 faceFromIndex(int faceIndex) {
      return FACES[faceIndex];
   }

   public static List<class_777>[] toQuadLists(Mesh mesh) {
      SpriteFinder finder = class_310.method_1551().method_72703().method_73025(class_10725.field_56382).spriteFinder();
      ImmutableList.Builder<class_777>[] builders = new ImmutableList.Builder[7];

      for(int i = 0; i < 7; ++i) {
         builders[i] = ImmutableList.builder();
      }

      mesh.forEach((q) -> {
         class_2350 cullFace = q.cullFace();
         builders[cullFace == null ? 6 : cullFace.method_10146()].add(q.toBakedQuad(finder.find(q)));
      });
      List<class_777>[] result = new List[7];

      for(int i = 0; i < 7; ++i) {
         result[i] = builders[i].build();
      }

      return result;
   }
}
