import time

from nonebot import logger
from nonebot.adapters.cqhttp.bot import Bot

from .plugin_config import plugin_config

QUEUE = []
LAST_SEND_TIME = time.time()

async def _do_send(bot: 'Bot', user: str, user_type: str, msg):
    if user_type == 'group':
        await bot.call_api('send_group_msg', group_id=user, message=msg)
    elif user_type == 'private':
        await bot.call_api('send_private_msg', user_id=user, message=msg)

async def do_send_msgs():
    global LAST_SEND_TIME
    if time.time() - LAST_SEND_TIME < 1.5:
        return
    if QUEUE:
        bot, user, user_type, msg, retry_time = QUEUE.pop(0)
        try:
            await _do_send(bot, user, user_type, msg)
        except Exception as e:
            if retry_time > 0:
                QUEUE.insert(0, (bot, user, user_type, msg, retry_time - 1))
            else:
                msg_str = str(msg)
                if len(msg_str) > 50:
                    msg_str = msg_str[:50] + '...'
                logger.warning(f'send msg err {e} {msg_str}')
        LAST_SEND_TIME = time.time()

async def send_msgs(bot, user, user_type, msgs):
    if plugin_config.bison_use_queue:
        for msg in msgs:
            QUEUE.append((bot, user, user_type, msg, 2))
    else:
        for msg in msgs:
            await _do_send(bot, user, user_type, msg)