"""Structural typing contracts for rendering backends.

Any class that exposes the right method signatures satisfies these
protocols -- no inheritance required. Existing generators (Google,
Yunwu/Doubao, Yunwu/Veo) are already compliant by duck typing.
"""

from typing import List, Protocol, runtime_checkable

from interfaces.image_output import ImageOutput
from interfaces.video_output import VideoOutput


@runtime_checkable
class ImageGenerator(Protocol):
    """Generates a single image from a text prompt and optional reference images."""

    async def generate_single_image(
        self,
        prompt: str,
        reference_image_paths: List[str],
        **kwargs,
    ) -> ImageOutput: ...


@runtime_checkable
class VideoGenerator(Protocol):
    """Generates a single video from a text prompt and optional reference images."""

    async def generate_single_video(
        self,
        prompt: str,
        reference_image_paths: List[str],
        **kwargs,
    ) -> VideoOutput: ...