"""
Async certificate asset generation (Django-Q worker).

Run a worker with:
  python manage.py qcluster
"""
from __future__ import annotations

import logging

from django.core.files.base import ContentFile

logger = logging.getLogger(__name__)


def generate_certificate_assets(certificate_id: int) -> str:
    """
    Build PDF + badge for a CourseCertificate and save to media.
    Safe to re-run (overwrites previous files).
    """
    from apps.courses.certificate_badge import build_badge_image_bytes
    from apps.courses.certificate_pdf import build_certificate_pdf_bytes
    from apps.courses.models import CourseCertificate

    cert = CourseCertificate.objects.select_related('user', 'course', 'attempt').get(
        pk=certificate_id,
    )
    pdf_bytes = build_certificate_pdf_bytes(cert)
    badge_bytes = build_badge_image_bytes(cert)

    pdf_name = f'{cert.certificate_number}.pdf'.replace('/', '-')
    badge_name = f'{cert.certificate_number}.png'.replace('/', '-')

    if cert.pdf_file:
        cert.pdf_file.delete(save=False)
    if cert.badge_image:
        cert.badge_image.delete(save=False)

    cert.pdf_file.save(pdf_name, ContentFile(pdf_bytes), save=False)
    cert.badge_image.save(badge_name, ContentFile(badge_bytes), save=False)
    cert.assets_ready = True
    cert.save(update_fields=['pdf_file', 'badge_image', 'assets_ready'])

    logger.info('Certificate assets ready for %s', cert.certificate_number)
    return cert.certificate_number
