from typing import Iterator

from sttts.api.message import Message, LlmMessageType
from sttts.api.model import OutputFilter


class SpeechFeedbackGenerator(OutputFilter):
    """
    Say the keywords or names of certain internal messages.
    """

    @classmethod
    def _to_utterance(cls, message: Message[LlmMessageType]) -> Message[LlmMessageType]:
        return Message(LlmMessageType.Utterance, message.data or message.msg.value or message.msg.name)

    def accept(self, message: Message[LlmMessageType]) -> Iterator[Message[LlmMessageType]]:
        if message.msg in (LlmMessageType.Start, LlmMessageType.FeedbackNeg):
            yield message
            yield self._to_utterance(message)
        elif message.msg in (LlmMessageType.Stop, LlmMessageType.FeedbackPos):
            yield self._to_utterance(message)
            yield message
        else:
            yield message

    def generate(self, message: Message[LlmMessageType]) -> Iterator[bytes]:
        return
        yield