"""
inventory/services/receipt_service.py
──────────────────────────────────────
Generates and emails sale receipts.
"""

import logging

from django.conf import settings
from django.core.mail import send_mail
from django.template.loader import render_to_string

logger = logging.getLogger(__name__)


def send_receipt_email(sale) -> bool:
    """
    Send an HTML receipt email for the given Sale.
    Returns True if sent, False if no email address.
    """
    if not sale.customer_email:
        return False

    logo_url = f"{settings.SITE_URL}/static/inventory/img/logo.png"
    html_body = render_to_string(
        "inventory/email/receipt_email.html",
        {
            "sale": sale,
            "items": sale.items.select_related("book").all(),
            "logo_url": logo_url,
        },
    )
    text_body = (
        f"Thank you for your purchase from TAI Afro Press.\n\n"
        f"Invoice: {sale.invoice_number}\n"
        f"Date: {sale.sale_date}\n"
        f"Total: KES {sale.total_net}\n\n"
        "Please keep this as your receipt."
    )

    try:
        send_mail(
            subject=f"Your TAI Afro Press Receipt — {sale.invoice_number}",
            message=text_body,
            from_email=settings.DEFAULT_FROM_EMAIL,
            recipient_list=[sale.customer_email],
            html_message=html_body,
            fail_silently=False,
        )
        sale.receipt_sent = True
        sale.save(update_fields=["receipt_sent"])
        logger.info("Receipt emailed for %s → %s", sale.invoice_number, sale.customer_email)
        return True
    except Exception:
        logger.exception("Failed to send receipt for %s", sale.invoice_number)
        return False
