using System.Collections.Generic;
using Microsoft.Xna.Framework.Graphics;

namespace Kav
{
    public static class ModelLoader
    {
        public static Kav.Model Load(GraphicsDevice graphicsDevice, Smuggler.ModelData modelData)
        {
            var meshes = new List<Kav.Mesh>();

            foreach (var meshData in modelData.Meshes)
            {
                var meshParts = new List<Kav.MeshPart>();

                foreach (var meshPartData in meshData.MeshParts)
                {
                    var triangles = new Kav.Triangle[meshPartData.Triangles.Length];
                    for (int i = 0; i < meshPartData.Triangles.Length; i++)
                    {
                        var smugglerTriangle = meshPartData.Triangles[i];

                        triangles[i] = new Kav.Triangle(
                            smugglerTriangle.A,
                            smugglerTriangle.B,
                            smugglerTriangle.C
                        );
                    }

                    var meshPart = new Kav.MeshPart(
                        meshPartData.VertexBuffer,
                        meshPartData.IndexBuffer,
                        meshPartData.Positions,
                        triangles
                    );

                    meshPart.Albedo = meshPartData.Albedo;
                    meshPart.Metallic = meshPartData.Metallic;
                    meshPart.Roughness = meshPartData.Roughness;

                    meshPart.AlbedoTexture = meshPartData.AlbedoTexture;
                    meshPart.NormalTexture = meshPartData.NormalTexture;
                    meshPart.MetallicRoughnessTexture = meshPartData.MetallicRoughnessTexture;

                    meshParts.Add(meshPart);
                }

                meshes.Add(new Kav.Mesh(meshParts.ToArray()));
            }

            return new Kav.Model(meshes.ToArray());
        }
    }
}