from __future__ import annotations

import unittest

from config import AnalyzerConfig
from amundsen.core.distance_calculator import DistanceCalculator
from amundsen.core.models import GPXDocument, Track, TrackPoint, TrackSegment
from amundsen.core.slope_analyzer import SlopeAnalyzer


class SlopeAnalyzerTest(unittest.TestCase):
    def test_segments_and_distribution(self) -> None:
        document = GPXDocument(
            name="test",
            tracks=[
                Track(
                    name="track",
                    segments=[
                        TrackSegment(
                            points=[
                                TrackPoint(0.0, 0.0, filtered_elevation=100.0),
                                TrackPoint(0.0, 0.0009, filtered_elevation=112.0),
                                TrackPoint(0.0, 0.0018, filtered_elevation=100.0),
                            ]
                        )
                    ],
                )
            ],
        )
        analyzer = SlopeAnalyzer(AnalyzerConfig(segment_length_m=100.0), DistanceCalculator())

        segments = analyzer.segments(document)
        distribution = analyzer.class_distribution(segments, DistanceCalculator().stats(document).distance_m)

        self.assertGreaterEqual(len(segments), 2)
        self.assertTrue(any(item.distance_km > 0 for item in distribution if item.label == "10-15%"))


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