"""Тесты чистой функции `build_transcript` (сборка строк-фраз для суммаризации)."""

from workers.summarizer.transcript import TranscriptLine, build_transcript


def test_empty_lines_produce_empty_transcript() -> None:
    """Пустой список фраз → пустая строка."""
    assert build_transcript([]) == ""


def test_single_line_mm_ss_format_under_one_hour() -> None:
    """Смещение меньше часа форматируется как `MM:SS`."""
    lines = [TranscriptLine(speaker="Аня", offset_s=65.0, text="привет всем")]

    assert build_transcript(lines) == "[Аня 01:05] привет всем"


def test_offset_at_or_above_one_hour_uses_hh_mm_ss_format() -> None:
    """Смещение от часа и больше форматируется как `ЧЧ:MM:SS`."""
    lines = [TranscriptLine(speaker="Боря", offset_s=3725.0, text="подведём итоги")]

    assert build_transcript(lines) == "[Боря 1:02:05] подведём итоги"


def test_lines_are_sorted_by_offset_regardless_of_input_order() -> None:
    """Строки транскрипта сортируются по `offset_s`, даже если поданы вразнобой."""
    lines = [
        TranscriptLine(speaker="Боря", offset_s=10.0, text="второй"),
        TranscriptLine(speaker="Аня", offset_s=0.0, text="первый"),
        TranscriptLine(speaker="Боря", offset_s=20.0, text="третий"),
    ]

    result = build_transcript(lines)

    assert result == "\n".join(
        [
            "[Аня 00:00] первый",
            "[Боря 00:10] второй",
            "[Боря 00:20] третий",
        ]
    )


def test_zero_offset_formats_as_zero_minutes_zero_seconds() -> None:
    """Нулевое смещение → `00:00`."""
    lines = [TranscriptLine(speaker="Аня", offset_s=0.0, text="начало")]

    assert build_transcript(lines) == "[Аня 00:00] начало"
