import json

from arclet.alconna import Alconna, Args, Subcommand
from nonebot import logger
from nonebot.adapters import Bot, Event
from nonebot.matcher import Matcher
from nonebot.typing import T_State
from nonebot_plugin_alconna import on_alconna
from nonebot_plugin_localstore import get_plugin_data_file

from nonebot_plugin_marshoai.config import config

marsho_memory_cmd = on_alconna(
    Alconna(
        f"{config.marshoai_default_name}.memory",
        Subcommand("view", alias={"v"}),
        Subcommand("reset", alias={"r"}),
    ),
    priority=96,
    block=True,
)

memory_path = get_plugin_data_file("memory.json")


@marsho_memory_cmd.assign("view")
async def view_memory(matcher: Matcher, state: T_State, event: Event):
    user_id = str(event.get_user_id())
    with open(memory_path, "r", encoding="utf-8") as f:
        memory_data = json.load(f)
    memorys = memory_data.get(user_id, [])
    if not memorys:
        await matcher.finish("好像对ta还没有任何记忆呢~")
    await matcher.finish("这些是有关ta的记忆：" + "\n".join(memorys))


@marsho_memory_cmd.assign("reset")
async def reset_memory(matcher: Matcher, state: T_State, event: Event):
    user_id = str(event.get_user_id())
    with open(memory_path, "r", encoding="utf-8") as f:
        memory_data = json.load(f)
    if user_id in memory_data:
        del memory_data[user_id]
        with open(memory_path, "w", encoding="utf-8") as f:
            json.dump(memory_data, f, ensure_ascii=False, indent=4)
        await matcher.finish("记忆已重置~")
    await matcher.finish("没有找到该用户的记忆~")
