import logging

from nyahome.config import config_manager
from nyahome.core.otp_store import email_otp_memory_store
from nyahome.core.send_email import SendEmailItem, email_sender_queue
from nyahome.core.template_render import template_render
from nyahome.database import ModelUser

logger = logging.getLogger(__name__)


async def send_2fa_email(user: ModelUser) -> bool:
    """
    向指定用户的邮箱发送验证邮件，用于验证登录请求。

    Returns:
        布尔值，表明邮件是否提交到发送队列。
        提交到发送队列并不代表邮件发送成功。
    """
    if not user.email:
        logger.warning(f"用户 {user.name} [{user.id}] 未提供邮箱，无法发送 2fa 邮件。")
        return False
    return await email_otp_memory_store.generate_and_send(user.id, user.email, "有人正在请求使用您的账户登录。")


async def s_send_verify_email(user_id: int, address: str) -> bool:
    """
    验证用户的更改邮箱请求的邮件地址

    Returns:
        布尔值，表明邮件是否提交到发送队列。
        提交到发送队列并不代表邮件发送成功。
    """
    return await email_otp_memory_store.generate_and_send(user_id, address, "您正在请求修改您的账户的邮件地址。")


async def s_verify_email(user_id: int, address: str, verify_code: str) -> bool:
    return email_otp_memory_store.verify(address=address, user_id=user_id, verify_code=verify_code)


async def s_send_test_email(to: str) -> bool:
    """
    向指定邮箱发送测试邮件。

    Returns:
        布尔值，表明邮件是否提交到发送队列。
        提交到发送队列并不代表邮件发送成功。
    """
    site_name = config_manager.get("site_name", "Nya Home")
    html = template_render.render_test(site_name=site_name)
    await email_sender_queue.put(
        SendEmailItem(
            to=to,
            subject=f"{site_name} - 邮件系统测试",
            body=html,
        )
    )
    return True
