from abc import ABC, abstractmethod
from typing import Iterable, List
from .models import Segment


class Transcriber(ABC):
    @abstractmethod
    def transcribe(self, audio_path: str, srt_out: str) -> Iterable[Segment]:
        pass


class Translator(ABC):
    @abstractmethod
    def translate_srt(self, in_srt: str, out_srt: str) -> None:
        pass


class TTSClient(ABC):
    @abstractmethod
    def synthesize_from_srt(self, srt_path: str, out_wav: str, **kwargs) -> None:
        pass


class AudioProcessor(ABC):
    @abstractmethod
    def extract_audio(self, video_path: str, out_wav: str) -> None:
        pass

    @abstractmethod
    def replace_audio_in_video(self, video_path: str, audio_path: str, out_video: str) -> None:
        pass

    @abstractmethod
    def burn_subtitles(self, video_path: str, srt_path: str, out_video: str) -> None:
        pass
