from src.common.logger import get_module_logger
from .chat_observer import ChatObserver

logger = get_module_logger("waiter")


class Waiter:
    """等待器，用于等待对话流中的事件"""

    def __init__(self, stream_id: str):
        self.stream_id = stream_id
        self.chat_observer = ChatObserver.get_instance(stream_id)

    async def wait(self, timeout: float = 20.0) -> bool:
        """等待用户回复或超时

        Args:
            timeout: 超时时间（秒）

        Returns:
            bool: 如果因为超时返回则为True，否则为False
        """
        try:
            message_before = self.chat_observer.get_last_message()

            # 等待新消息
            logger.debug(f"等待新消息，超时时间: {timeout}秒")

            is_timeout = await self.chat_observer.wait_for_update(timeout=timeout)
            if is_timeout:
                logger.debug("等待超时，没有收到新消息")
                return True

            # 检查是否是新消息
            message_after = self.chat_observer.get_last_message()
            if message_before and message_after and message_before.get("message_id") == message_after.get("message_id"):
                # 如果消息ID相同，说明没有新消息
                logger.debug("没有收到新消息")
                return True

            logger.debug("收到新消息")
            return False

        except Exception as e:
            logger.error(f"等待时出错: {str(e)}")
            return True
