/**
* invoice_pdf — génération de PDF pour les factures natives.
*
* **Phase 1 stub.** L'implémentation réelle (templates @react-pdf/renderer
* + upload MinIO) arrive en Phase 2 avec packages/ui/invoice-templates/.
* Pour l'instant, `generateInvoicePdf` renvoie `null` (= pas de PDF stocké)
* et `previewInvoicePdf` throw `not_implemented` (501).
*
* Le contrat de l'interface est figé pour que la Phase 2 soit un drop-in
* remplacement sans toucher au controller : on remplace le corps de ces
* fonctions par l'appel à `@react-pdf/renderer.renderToBuffer(...)` puis
* `media_storage.uploadBuffer(...)`.
*/
import type Invoice from '#models/invoice'
import { Exception } from '@adonisjs/core/exceptions'
export interface InvoiceRenderContext {
/** L'invoice complet, snapshots compris. */
invoice: Invoice
/** Settings résolus (themeSlug, accentColor, issuer, rib…). */
// Le type complet est dans #services/invoice_settings → ResolvedInvoiceSettings,
// mais comme c'est un stub on garde unknown pour ne pas créer de couplage
// que Phase 2 devra de toute façon retravailler.
resolvedSettings: unknown
}
export interface GeneratedPdf {
/** Clé MinIO sous laquelle le PDF est stocké. */
storageKey: string
/** Taille du PDF en bytes. */
bytes: number
}
/**
* Génère le PDF de la facture et l'upload sur MinIO. Stub Phase 1.
*
* Phase 2 : renderToBuffer() → uploadBuffer → storageKey.
*/
export async function generateInvoicePdf(_ctx: InvoiceRenderContext): Promise {
// Phase 1 : pas de génération. Le controller persiste l'invoice avec
// pdfStorageKey=null et l'UI affichera "PDF en cours de génération"
// (ou un placeholder). La Phase 2 active la vraie génération.
return null
}
/**
* Renvoie un buffer PDF pour preview (sans persister). Stub Phase 1.
*
* Phase 2 : même rendu que generateInvoicePdf, mais retourne le buffer
* directement au lieu d'uploader.
*/
export async function previewInvoicePdf(_ctx: InvoiceRenderContext): Promise {
throw new Exception('PDF preview not yet implemented (Phase 2)', {
status: 501,
code: 'not_implemented',
})
}