import logging
from typing import Optional, Any
from core.schema import StandardMessage, StandardResponse
from core.events.event_bus import bus

logger = logging.getLogger("cs_agent")

class BusinessEngine:
    """
    业务逻辑中枢：
    1. 接收 StandardMessage。
    2. 决定由哪个 AI 工具或流程处理。
    3. 返回 StandardResponse。
    4. 对外广播异步事件。
    """
    def __init__(self, agent_instance: Any = None):
        """
        :param agent_instance: 核心 AI Agent 的实例（比如重构后的 CustomerServiceAgent）
        """
        self.agent = agent_instance

    async def handle_message(self, msg: StandardMessage) -> StandardResponse:
        """
        大脑的思考主入口
        """
        logger.info(f"[Engine] 收到来自 {msg.platform} 的消息: {msg.user_id} -> {msg.content[:50]}")
        
        # TODO: 这里将接入重构后的 Single Agent + Tool Calling
        # 目前模拟一个简单的规则响应，展示 StandardResponse 的用法
        
        if "报价" in msg.content or msg.image_urls:
            return StandardResponse(
                reply_content="正在为你查看图片，请稍等...",
                metadata={"acc_id": msg.acc_id, "acc_type": msg.acc_type}
            )
        
        if "转人工" in msg.content:
            return StandardResponse(
                reply_content="正在为你转接设计师...",
                need_transfer=True,
                metadata={"acc_id": msg.acc_id, "acc_type": msg.acc_type}
            )

        # 兜底回复
        return StandardResponse(
            reply_content="你好，我是AI助手，有什么可以帮你的？",
            metadata={"acc_id": msg.acc_id, "acc_type": msg.acc_type}
        )

    async def emit_image_result(self, user_id: str, platform: str, url: str, acc_id: str):
        """
        这是一个业务触发器示例：当图片处理完成时，由 Engine 主动发广播。
        """
        await bus.emit(
            "MESSAGE_OUTBOUND",
            user_id=user_id,
            platform=platform,
            response=StandardResponse(
                reply_content=url,
                msg_type=1, # 图片
                metadata={"acc_id": acc_id}
            )
        )
