from __future__ import annotations

import unittest

from config import HikingModelConfig
from amundsen.core.distance_calculator import DistanceCalculator
from amundsen.core.models import GPXDocument, Track, TrackPoint, TrackSegment, Waypoint
from amundsen.core.time_predictor import TimePredictor
from amundsen.core.waypoint_analysis import WaypointAnalyzer


class WaypointAnalysisTest(unittest.TestCase):
    def test_legs_include_route_start_and_end(self) -> None:
        document = GPXDocument(
            name="route",
            waypoints=[
                Waypoint(lat=0.0, lon=0.001, name="Eerste waypoint"),
                Waypoint(lat=0.0, lon=0.002, name="Tweede waypoint"),
            ],
            tracks=[
                Track(
                    name="track",
                    segments=[
                        TrackSegment(
                            points=[
                                TrackPoint(0.0, 0.0, filtered_elevation=100.0),
                                TrackPoint(0.0, 0.001, filtered_elevation=110.0),
                                TrackPoint(0.0, 0.002, filtered_elevation=90.0),
                                TrackPoint(0.0, 0.003, filtered_elevation=95.0),
                            ]
                        )
                    ],
                )
            ],
        )
        analyzer = WaypointAnalyzer(
            DistanceCalculator(),
            TimePredictor(HikingModelConfig()),
        )

        legs = analyzer.legs(document)

        self.assertEqual(
            [(leg.start_name, leg.end_name) for leg in legs],
            [
                ("Route start", "Eerste waypoint"),
                ("Eerste waypoint", "Tweede waypoint"),
                ("Tweede waypoint", "Route einde"),
            ],
        )


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