"""Контракт плагина Transcriber."""

from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import ClassVar


@dataclass(frozen=True, slots=True)
class Segment:
    """Один транскрибированный сегмент трека."""

    start: float  # секунды от начала трека
    end: float
    text: str


class Transcriber(ABC):
    """Интерфейс Strategy для реализаций преобразования речи в текст."""

    provider: ClassVar[str]

    @abstractmethod
    def transcribe(self, audio_path: str, language: str = "ru") -> list[Segment]:
        """Транскрибировать аудиофайл по пути `audio_path` в список сегментов."""
        ...
