from functools import partial

from nonebot.log import logger

from ..db_config import SubscribeDupException, config
from .nbesf_model import NBESF_VERSION, SubGroup, SubReceipt


async def subs_receipt_gen_ver_1(nbesf_data: SubGroup):
    for item in nbesf_data.groups:
        sub_receipt = partial(SubReceipt, user=item.user.uid, user_type=item.user.type)

        for sub in item.subs:
            receipt = sub_receipt(
                target=sub.target.target,
                target_name=sub.target.target_name,
                platform_name=sub.target.platform_name,
                cats=sub.categories,
                tags=sub.tags,
            )
            try:
                await config.add_subscribe(**receipt.dict())
            except SubscribeDupException:
                logger.warning(f"!添加订阅条目 {repr(receipt)} 失败: 相同的订阅已存在")
            except Exception as e:
                logger.error(f"!添加订阅条目 {repr(receipt)} 失败: {repr(e)}")
            else:
                logger.success(f"添加订阅条目 {repr(receipt)} 成功!")