using Microsoft.VisualStudio.TestTools.UnitTesting;
using NavisworksTransport.Core.Animation;
using NavisworksTransport.Utils.CoordinateSystem;
using System.Numerics;

namespace NavisworksTransport.UnitTests.CoordinateSystem
{
    [TestClass]
    public class GroundPathObjectLiftOffsetTests
    {
        [TestMethod]
        public void YUp_GroundPathLift_ShouldOffsetAlongHostY()
        {
            Vector3 offset = PathAnimationManager.ResolveGroundPathObjectLiftOffsetVector(1.25, CoordinateSystemType.YUp);

            AssertVector(offset, 0.0, 1.25, 0.0);
        }

        [TestMethod]
        public void ZUp_GroundPathLift_ShouldOffsetAlongHostZ()
        {
            Vector3 offset = PathAnimationManager.ResolveGroundPathObjectLiftOffsetVector(1.25, CoordinateSystemType.ZUp);

            AssertVector(offset, 0.0, 0.0, 1.25);
        }

        [TestMethod]
        public void GroundPathLift_ShouldReturnZero_WhenLiftIsNotPositive()
        {
            Vector3 offset = PathAnimationManager.ResolveGroundPathObjectLiftOffsetVector(0.0, CoordinateSystemType.ZUp);

            AssertVector(offset, 0.0, 0.0, 0.0);
        }

        private static void AssertVector(Vector3 actual, double x, double y, double z, double tolerance = 1e-6)
        {
            Assert.AreEqual(x, actual.X, tolerance);
            Assert.AreEqual(y, actual.Y, tolerance);
            Assert.AreEqual(z, actual.Z, tolerance);
        }
    }
}
