from typing import AsyncIterator

from .base import SSEEventStreamerBase
from models.results import FrameResult
from models.recovery import UserInputRequest


class SSEEventStreamer(SSEEventStreamerBase):
    async def emit_frame_result(
        self, flight_id: str, result: FrameResult
    ) -> None:
        raise NotImplementedError

    async def emit_status_update(
        self, flight_id: str, status: dict
    ) -> None:
        raise NotImplementedError

    async def emit_user_input_request(
        self, flight_id: str, request: UserInputRequest
    ) -> None:
        raise NotImplementedError

    async def emit_error(
        self, flight_id: str, error: str
    ) -> None:
        raise NotImplementedError

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

    async def unsubscribe(self, flight_id: str, subscriber_id: str) -> None:
        raise NotImplementedError

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

