import queue


class Signals:
    def __init__(self):
        self._human_speaking = False
        self._AI_speaking = False
        self._AI_thinking = False
        self._last_message_time = 0.0
        self._new_message = False
        self._tts_ready = False
        self._stt_ready = False
        self._recentTwitchMessages = []
        self._history = []

        # This flag indicates to all threads that they should immediately terminate
        self._terminate = False

        self.sio_queue = queue.SimpleQueue()

    @property
    def human_speaking(self):
        return self._human_speaking

    @human_speaking.setter
    def human_speaking(self, value):
        self._human_speaking = value
        self.sio_queue.put(('human_speaking', value))
        if value:
            print("SIGNALS: Human Talking Start")
        else:
            print("SIGNALS: Human Talking Stop")

    @property
    def AI_speaking(self):
        return self._AI_speaking

    @AI_speaking.setter
    def AI_speaking(self, value):
        self._AI_speaking = value
        self.sio_queue.put(('AI_speaking', value))
        if value:
            print("SIGNALS: AI Talking Start")
        else:
            print("SIGNALS: AI Talking Stop")

    @property
    def AI_thinking(self):
        return self._AI_thinking

    @AI_thinking.setter
    def AI_thinking(self, value):
        self._AI_thinking = value
        self.sio_queue.put(('AI_thinking', value))
        if value:
            print("SIGNALS: AI Thinking Start")
        else:
            print("SIGNALS: AI Thinking Stop")

    @property
    def last_message_time(self):
        return self._last_message_time

    @last_message_time.setter
    def last_message_time(self, value):
        self._last_message_time = value

    @property
    def new_message(self):
        return self._new_message

    @new_message.setter
    def new_message(self, value):
        self._new_message = value
        if value:
            print("SIGNALS: New Message")

    @property
    def tts_ready(self):
        return self._tts_ready

    @tts_ready.setter
    def tts_ready(self, value):
        self._tts_ready = value

    @property
    def stt_ready(self):
        return self._stt_ready

    @stt_ready.setter
    def stt_ready(self, value):
        self._stt_ready = value

    @property
    def recentTwitchMessages(self):
        return self._recentTwitchMessages

    @recentTwitchMessages.setter
    def recentTwitchMessages(self, value):
        self._recentTwitchMessages = value
        self.sio_queue.put(('recent_twitch_messages', value))

    @property
    def history(self):
        return self._history

    @history.setter
    def history(self, value):
        self._history = value

    @property
    def terminate(self):
        return self._terminate

    @terminate.setter
    def terminate(self, value):
        self._terminate = value