import logging

from sqlalchemy.exc import NoResultFound
from sqlmodel import select

from nyahome.core.password import pwd_context
from nyahome.database import ModelUser, async_get_session

logger = logging.getLogger(__name__)


async def init_admin_user() -> None:
    """
    异步初始化管理员用户。向数据库中添加一个 id=1，用户名和密码均为 admin 的用户。

    如果 id=1 的用户已经存在，视为初始化完成，执行结束。

    作为异步任务，应该使用 asyncio.create_task() 执行本方法。本方法无返回值。
    """
    async with async_get_session() as session:
        logger.info("尝试初始化管理员用户...")
        # 尝试获取 id=1 的用户，如果不存在则创建，存在则忽略。
        try:
            admin: ModelUser = session.exec(select(ModelUser).where(ModelUser.id == 1)).one()
            logger.info(f"管理员用户已存在：{admin.name}")
        except NoResultFound:
            admin = ModelUser(
                id=1,
                name="admin",
                password=pwd_context.hash("admin"),  # 使用 admin 作为密码
                is_admin=True,
                secure_changes="[]",
            )
            session.add(admin)
            session.commit()
            logger.info("管理员用户已创建，用户名和密码均为 admin。")
