        due_date=sample.get("due_date", "2026-01-30"),
        phone=sample.get("phone", "+1 555 000 0000"),
    )
    res = engine.substitute(t.body_html, sample.get("recipient", {
        "FirstName": "John", "LastName": "Smith", "CompanyName": "Example Corp",
        "CustomerEmail": "customer@example.com", "Email": "john@example.com"}),
        g, custom_fields=sample.get("custom_fields", {}),
        extra={"unsubscribe_link": "https://example.com/unsubscribe?token=sample"})
    problems = message_builder.validate_html(res.text)
    return {"rendered_html": message_builder.sanitize_preview(res.text),
            "unknown_variables": res.unknown, "missing_variables": res.missing,
            "warnings": problems,
            "generated": {"invoice_number": g.invoice_number, "amount": g.amount,
                          "shipping": g.shipping}}


@router.post("/{template_id}/test-pdf")
async def test_pdf(template_id: int, sample: dict = {},
                   user: User = Depends(get_current_user_csrf), db: AsyncSession = Depends(get_db)):
    """Real HTML->PDF conversion test; returns the PDF inline."""
    t = await db.get(EmailTemplate, template_id)
    if not t or t.user_id != user.id:
        raise HTTPException(404, "Not found")
    from app.services.variable_engine import GeneratedValues, VariableEngine
    engine = VariableEngine(sample.get("config", {}))
    g = GeneratedValues(invoice_number=engine.generate_invoice_number(set()),
                        amount=engine.generate_amount(), shipping=engine.generate_shipping(),
                        invoice_date=sample.get("invoice_date", "2026-01-15"),
                        due_date=sample.get("due_date", "2026-01-30"))
    res = engine.substitute(t.body_html, sample.get("recipient", {}), g,
                            extra={"unsubscribe_link": "https://example.com/unsubscribe"})
    pdf = message_builder.html_to_pdf(res.text)
    import base64
    return {"pdf_base64": base64.b64encode(pdf).decode(), "size_bytes": len(pdf),
            "engine": "WeasyPrint"}


@router.post("/{template_id}/test-image")
async def test_image(template_id: int, sample: dict = {},
                     user: User = Depends(get_current_user_csrf), db: AsyncSession = Depends(get_db)):
    """Real HTML→PNG conversion test; returns the image inline."""
