import json
from pathlib import Path

from polisher_control.contracts import SpindleDirection, normalize_spindle_direction
from polisher_control.telemetry_channels import RECOMMENDED_CHANNELS

ROOT = Path(__file__).resolve().parents[1]


def test_spindle_direction_enum_uses_stable_wire_values():
    assert SpindleDirection.CLOCKWISE.value == "cw"
    assert SpindleDirection.COUNTER_CLOCKWISE.value == "ccw"
    assert SpindleDirection.allowed_values() == ["cw", "ccw"]


def test_normalize_spindle_direction_accepts_operator_aliases():
    assert normalize_spindle_direction("cw") == SpindleDirection.CLOCKWISE
    assert normalize_spindle_direction("clockwise") == SpindleDirection.CLOCKWISE
    assert normalize_spindle_direction("ccw") == SpindleDirection.COUNTER_CLOCKWISE
    assert normalize_spindle_direction("counter-clockwise") == SpindleDirection.COUNTER_CLOCKWISE


def test_spindle_direction_is_in_controller_job_segment_schema():
    schema = json.loads((ROOT / "shared/schemas/controller-job.schema.json").read_text())
    segment = schema["$defs"]["segment"]

    assert "commanded_spindle_direction" in segment["required"]
    assert segment["properties"]["commanded_spindle_direction"]["enum"] == ["cw", "ccw"]


def test_spindle_direction_is_logged_as_telemetry_context():
    assert "spindle_direction_setpoint" in RECOMMENDED_CHANNELS
    assert "spindle_direction_actual" in RECOMMENDED_CHANNELS
