from __future__ import annotations

import unittest

from amundsen.core.distance_calculator import DistanceCalculator
from amundsen.core.models import GPXDocument, Track, TrackPoint, TrackSegment


class DistanceCalculatorTest(unittest.TestCase):
    def test_distance_and_filtered_elevation_totals(self) -> None:
        document = GPXDocument(
            name="test",
            tracks=[
                Track(
                    name="track",
                    segments=[
                        TrackSegment(
                            points=[
                                TrackPoint(0.0, 0.0, elevation=100.0, filtered_elevation=100.0),
                                TrackPoint(0.0, 0.001, elevation=200.0, filtered_elevation=110.0),
                                TrackPoint(0.0, 0.002, elevation=50.0, filtered_elevation=90.0),
                            ]
                        )
                    ],
                )
            ],
        )

        stats = DistanceCalculator().stats(document)

        self.assertAlmostEqual(stats.distance_m, 222.39, delta=0.5)
        self.assertEqual(stats.ascent_m, 10.0)
        self.assertEqual(stats.descent_m, 20.0)
        self.assertEqual(stats.min_elevation_m, 90.0)
        self.assertEqual(stats.max_elevation_m, 110.0)


if __name__ == "__main__":
    unittest.main()
