"""
二维码生成工具
"""
import os
import qrcode
from datetime import datetime
from pathlib import Path
from app.core.config import settings


def generate_qr_code(asset_code: str, save_path: str = None) -> str:
    """
    生成资产二维码

    Args:
        asset_code: 资产编码
        save_path: 保存路径（可选）

    Returns:
        二维码文件相对路径
    """
    # 如果未指定保存路径，使用默认路径
    if not save_path:
        qr_dir = Path(settings.QR_CODE_DIR)
    else:
        qr_dir = Path(save_path)

    # 确保目录存在
    qr_dir.mkdir(parents=True, exist_ok=True)

    # 生成文件名
    filename = f"{asset_code}.png"
    file_path = qr_dir / filename

    # 创建二维码
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=settings.QR_CODE_BORDER,
    )
    qr.add_data(asset_code)
    qr.make(fit=True)

    # 生成图片
    img = qr.make_image(fill_color="black", back_color="white")

    # 保存文件
    img.save(str(file_path))

    # 返回相对路径
    return f"{settings.QR_CODE_DIR}/{filename}"


def get_qr_code_url(asset_code: str) -> str:
    """
    获取二维码URL

    Args:
        asset_code: 资产编码

    Returns:
        二维码URL
    """
    filename = f"{asset_code}.png"
    return f"/static/{settings.QR_CODE_DIR}/{filename}"


def delete_qr_code(asset_code: str) -> bool:
    """
    删除二维码文件

    Args:
        asset_code: 资产编码

    Returns:
        是否删除成功
    """
    try:
        file_path = Path(settings.QR_CODE_DIR) / f"{asset_code}.png"
        if file_path.exists():
            file_path.unlink()
            return True
        return False
    except Exception:
        return False
