using System.ComponentModel;
using Evos.Api.Model.Graphic;
using Evos.CommonValueObjects;
using Nanosoft.Collections.WriteProtected.ReadOnly.List;
using Nanosoft.Common.InternationalSystemOfUnits.Access;
using Nanosoft.Common.ValueObjects.Common;

namespace Evos.Api.Samples.Infrastructure
{
    /// Геометрия для сэмплов: одного треугольника хватает, чтобы показать всё, что связано с мешами.
    /// Настоящую геометрию вы возьмёте из своей системы — здесь она нужна лишь как наполнение.
    [Localizable(false)]
    internal static class SampleGeometry
    {
        /// Треугольный меш: вершины, индексы граней и цвет.
        public static MeshGraphic Triangle(Color color)
        {
            return new MeshGraphic(TriangleVertices(), TriangleFaces(), color);
        }

        public static ReadOnlyList<Position3D> TriangleVertices()
        {
            return new List<Position3D>
            {
                Position(-0.5, 0, 0),
                Position(0, 1, 0),
                Position(0.5, 0, 0)
            }.ToReadOnly();
        }

        /// Тот же треугольник, отодвинутый по X: другая геометрия — другой хэш, а значит другой продукт.
        public static ReadOnlyList<Position3D> ShiftedTriangleVertices()
        {
            return new List<Position3D>
            {
                Position(10, 0, 0),
                Position(10.5, 1, 0),
                Position(11, 0, 0)
            }.ToReadOnly();
        }

        public static ReadOnlyList<int> TriangleFaces()
        {
            return new List<int> { 0, 1, 2 }.ToReadOnly();
        }

        public static Position3D Position(double x, double y, double z)
        {
            return new Position3D(
                ValueObjectsAccess.Meter.FromMeter(x),
                ValueObjectsAccess.Meter.FromMeter(y),
                ValueObjectsAccess.Meter.FromMeter(z));
        }
    }
}
