class AbstractError(Exception):
    @property
    def title(self):
        raise NotImplementedError

    def __init__(self, message: str):
        super().__init__()
        self.message = message


class CustomBaseError(AbstractError):
    title = "Obecná chyba"


class OpenFileError(CustomBaseError):
    title = "Chyba při otevření souboru"


class OpenCVError(CustomBaseError):
    title = "Chyba OpenCV"


class VideoProcessingError(OpenCVError):
    title = "Chyba zpracování videa"


class MotionDetectionError(VideoProcessingError):
    title = "Chyba detekce pohybů"


class ObjectDetectionError(VideoProcessingError):
    title = "Chyba detekce objektů"


class SaveImageError(OpenCVError):
    title = "Chyba uložení obrázků"


class ReportGenerationError(AbstractError):
    title = "Chyba vytváření reportů"


class SubprocessError(CustomBaseError):
    title = "Chyba vnějšího procesu"


class VideoCutError(SubprocessError):
    title = "Chyba ořezovaní videa"
