import datetime

from nonebug import App


async def test_get_platform_target(app: App, init_scheduler):
    from nonebot_plugin_saa import TargetQQGroup

    from nonebot_bison.config.db_config import config
    from nonebot_bison.types import Target as T_Target

    await config.add_subscribe(
        TargetQQGroup(group_id=123),
        target=T_Target("weibo_id"),
        target_name="weibo_name",
        platform_name="weibo",
        cats=[],
        tags=[],
    )
    # await config.add_cookie(TargetQQGroup(group_id=123), "weibo", "cookie")
    # cookies = await config.get_cookie_by_user(TargetQQGroup(group_id=123))
    #
    # res = await config.get_platform_target("weibo")
    # assert len(res) == 2
    # await config.del_subscribe(TargetQQGroup(group_id=123), T_Target("weibo_id1"), "weibo")
    # res = await config.get_platform_target("weibo")
    # assert len(res) == 2
    # await config.del_subscribe(TargetQQGroup(group_id=123), T_Target("weibo_id"), "weibo")
    # res = await config.get_platform_target("weibo")
    # assert len(res) == 1
    #
    # async with AsyncSession(get_engine()) as sess:
    #     res = await sess.scalars(select(Target).where(Target.platform_name == "weibo"))
    #     assert len(res.all()) == 2
    # await config.get_cookie_by_user(TargetQQGroup(group_id=123))


async def test_cookie_by_user(app: App, init_scheduler):
    from nonebot_plugin_saa import TargetQQGroup

    from nonebot_bison.config.db_config import config
    from nonebot_bison.types import Target as T_Target

    await config.add_subscribe(
        TargetQQGroup(group_id=123),
        target=T_Target("weibo_id"),
        target_name="weibo_name",
        platform_name="weibo",
        cats=[],
        tags=[],
    )

    await config.add_cookie_with_content(TargetQQGroup(group_id=123), "weibo", "cookie")

    cookies = await config.get_cookie(TargetQQGroup(group_id=123))
    cookie = cookies[0]
    assert len(cookies) == 1
    assert cookie.content == "cookie"
    assert cookie.platform_name == "weibo"
    cookie.last_usage = 0
    assert cookie.status == ""
    assert cookie.tags == {}
    cookie.content = "cookie1"
    cookie.last_usage = datetime.datetime(2024, 8, 22, 0, 0, 0)
    cookie.status = "status1"
    cookie.tags = {"tag1": "value1"}
    await config.update_cookie(cookie)
    cookies = await config.get_cookie(TargetQQGroup(group_id=123))

    assert len(cookies) == 1
    assert cookies[0].content == cookie.content
    assert cookies[0].last_usage == cookie.last_usage
    assert cookies[0].status == cookie.status
    assert cookies[0].tags == cookie.tags

    await config.delete_cookie_by_id(cookies[0].id)
    cookies = await config.get_cookie(TargetQQGroup(group_id=123))
    assert len(cookies) == 0


async def test_cookie_target_by_target(app: App, init_scheduler):
    from nonebot_plugin_saa import TargetQQGroup

    from nonebot_bison.config.db_config import config
    from nonebot_bison.types import Target as T_Target

    await config.add_subscribe(
        TargetQQGroup(group_id=123),
        target=T_Target("weibo_id"),
        target_name="weibo_name",
        platform_name="weibo",
        cats=[],
        tags=[],
    )

    id = await config.add_cookie_with_content(TargetQQGroup(group_id=123), "weibo", "cookie")

    await config.add_cookie_target(T_Target("weibo_id"), "weibo", id)

    cookies = await config.get_cookie_by_target(T_Target("weibo_id"), "weibo")
    assert len(cookies) == 1
    assert cookies[0].content == "cookie"
    assert cookies[0].platform_name == "weibo"

    await config.delete_cookie_target(T_Target("weibo_id"), "weibo", id)
    cookies = await config.get_cookie_by_target(T_Target("weibo_id"), "weibo")
    assert len(cookies) == 0