"""Waypoint-Recorder: laufe die Route einmal selbst, der Bot schreibt mit.

Aufnahme an → jede Koordinaten-Aenderung wird als walk-Wegpunkt
gespeichert → Aufnahme aus → Etagen-Uebergaenge werden automatisch als
moveUp/moveDown-Transitions eingefuegt (gleiche Logik wie der
BBot-Importer). Die Route ist sofort spielbar — ohne BBot-Datei,
ohne Handarbeit an Koordinaten.

Aktivierung ueber die Cavebot-Seite (Button "Aufzeichnen"), Status in
context['ng_recording'].
"""
from src.importers.bbot import _convert_floor_transitions, _waypoint


def recordTick(context):
    """Loop-Hook: haengt Koordinaten-Aenderungen an die Aufnahme."""
    recording = context.get('ng_recording')
    if recording is None:
        return context
    coordinate = context['ng_radar']['coordinate']
    if coordinate is None or any(value is None for value in coordinate):
        return context
    points = recording.setdefault('points', [])
    current = list(coordinate)
    if points and points[-1] == current:
        return context
    points.append(current)
    return context


def finishRecording(recording):
    """Baut die finale Wegpunkt-Liste inkl. Etagen-Transitions."""
    waypoints = [
        _waypoint('walk', tuple(point), {'exact': False})
        for point in recording.get('points', [])
    ]
    _convert_floor_transitions(waypoints)
    return waypoints
