# PDF Framework

Ce répertoire re-exporte les primitives de [`@react-pdf/renderer`](https://react-pdf.org) et fournit un utilitaire de nommage de fichiers. Il ne contient aucun template métier — les features créent leurs propres documents et utilisent ce module pour le rendu.

---

## Structure

```
src/core/pdf/
└── index.js     re-exports @react-pdf/renderer + getFilename
```

---

## Import

```js
import {
  renderToBuffer,
  Document,
  Page,
  View,
  Text,
  Image,
  Link,
  StyleSheet,
  Font,
  getFilename,
} from '@zen/core/pdf';
```

---

## API

### `renderToBuffer(element)`

Rend un document React PDF en `Buffer`. Retourne une `Promise<Buffer>`.

```js
import { renderToBuffer, Document, Page, Text } from '@zen/core/pdf';

const buffer = await renderToBuffer(
  <Document>
    <Page>
      <Text>Bonjour</Text>
    </Page>
  </Document>
);
```

Utiliser ce buffer pour servir le PDF en réponse HTTP ou l'écrire sur disque.

---

### `getFilename(prefix, identifier, date?)`

Retourne un nom de fichier normalisé pour un PDF.

```js
getFilename('invoice', '12345')
// 'invoice-12345-2024-01-15.pdf'

getFilename('receipt', 'ORD-99', new Date('2024-06-01'))
// 'receipt-ORD-99-2024-06-01.pdf'
```

| Paramètre | Type | Description |
|-----------|------|-------------|
| `prefix` | `string` | Type de document (`invoice`, `receipt`, etc.) |
| `identifier` | `string` | Identifiant unique (numéro de commande, ID, etc.) |
| `date` | `Date` | Date du document (défaut : aujourd'hui) |

---

### Primitives re-exportées

Toutes les primitives de `@react-pdf/renderer` sont disponibles directement depuis `@zen/core/pdf` :

| Export | Description |
|--------|-------------|
| `Document` | Racine d'un document PDF |
| `Page` | Page du document |
| `View` | Conteneur (équivalent `div`) |
| `Text` | Bloc de texte |
| `Image` | Image (URL ou base64) |
| `Link` | Lien hypertexte |
| `StyleSheet` | Création de styles (similaire à `StyleSheet.create` React Native) |
| `Font` | Enregistrement de polices personnalisées |

---

## Créer un template depuis une feature

Les templates vivent **avec leur feature**, pas dans ce répertoire.

```jsx
// src/features/orders/pdf/InvoiceDocument.js
import { Document, Page, View, Text, StyleSheet } from '@zen/core/pdf';

const styles = StyleSheet.create({
  page: { padding: 40 },
  title: { fontSize: 20, marginBottom: 16 },
});

export const InvoiceDocument = ({ order }) => (
  <Document>
    <Page style={styles.page}>
      <Text style={styles.title}>Facture #{order.number}</Text>
      <Text>{order.customerName}</Text>
    </Page>
  </Document>
);
```

```js
// src/features/orders/pdf/sendInvoice.js
import { renderToBuffer, getFilename } from '@zen/core/pdf';
import { InvoiceDocument } from './InvoiceDocument.js';

export async function generateInvoicePdf(order) {
  const buffer = await renderToBuffer(<InvoiceDocument order={order} />);
  const filename = getFilename('invoice', order.number);
  return { buffer, filename };
}
```

```js
// Next.js Route Handler
export async function GET(req, { params }) {
  const order = await getOrder(params.id);
  const { buffer, filename } = await generateInvoicePdf(order);

  return new Response(buffer, {
    headers: {
      'Content-Type': 'application/pdf',
      'Content-Disposition': `attachment; filename="${filename}"`,
    },
  });
}
```
