from bridge.context import Context, ContextType
from bridge.reply import Reply, ReplyType
from common.log import logger
from linkai import LinkAIClient, PushMsg
from config import conf, pconf, plugin_config
from plugins import PluginManager


chat_client: LinkAIClient

class ChatClient(LinkAIClient):
    def __init__(self, api_key, host, channel):
        super().__init__(api_key, host)
        self.channel = channel
        self.client_type = channel.channel_type

    def on_message(self, push_msg: PushMsg):
        session_id = push_msg.session_id
        msg_content = push_msg.msg_content
        logger.info(f"receive msg push, session_id={session_id}, msg_content={msg_content}")
        context = Context()
        context.type = ContextType.TEXT
        context["receiver"] = session_id
        context["isgroup"] = push_msg.is_group
        self.channel.send(Reply(ReplyType.TEXT, content=msg_content), context)

    def on_config(self, config: dict):
        if not self.client_id:
            return
        logger.info(f"从控制台加载配置: {config}")
        local_config = conf()
        for key in local_config.keys():
            if config.get(key) is not None:
                local_config[key] = config.get(key)
        if config.get("reply_voice_mode"):
            if config.get("reply_voice_mode") == "voice_reply_voice":
                local_config["voice_reply_voice"] = True
            elif config.get("reply_voice_mode") == "always_reply_voice":
                local_config["always_reply_voice"] = True
        # if config.get("admin_password") and plugin_config["Godcmd"]:
        #     plugin_config["Godcmd"]["password"] = config.get("admin_password")
        #     PluginManager().instances["Godcmd"].reload()
        # if config.get("group_app_map") and pconf("linkai"):
        #     local_group_map = {}
        #     for mapping in config.get("group_app_map"):
        #         local_group_map[mapping.get("group_name")] = mapping.get("app_code")
        #     pconf("linkai")["group_app_map"] = local_group_map
        #     PluginManager().instances["linkai"].reload()


def start(channel):
    global chat_client
    chat_client = ChatClient(api_key=conf().get("linkai_api_key"),
                        host="link-ai.chat", channel=channel)
    chat_client.start()