from typing import Optional, AsyncIterator

from .base import ImageInputPipelineBase
from models.images import ImageData, ImageBatch, ProcessingStatus
from models.core import ValidationResult


class ImageInputPipeline(ImageInputPipelineBase):
    async def receive_batch(
        self, flight_id: str, batch: ImageBatch
    ) -> ValidationResult:
        raise NotImplementedError

    async def get_next_image(self, flight_id: str) -> Optional[ImageData]:
        raise NotImplementedError

    async def stream_images(self, flight_id: str) -> AsyncIterator[ImageData]:
        raise NotImplementedError
        yield

    async def get_status(self, flight_id: str) -> ProcessingStatus:
        raise NotImplementedError

    async def clear_queue(self, flight_id: str) -> bool:
        raise NotImplementedError

    async def get_queue_size(self, flight_id: str) -> int:
        raise NotImplementedError

