import type { FirestoreDocument } from '../firebase/types'; export interface PdfTemplateSource { template: { id: string; language: string; data: Record; }; } export interface PdfHtmlSource { html: string; } export interface PdfUrlSource { url: string; } export type PdfSource = PdfTemplateSource | PdfHtmlSource | PdfUrlSource; export interface PdfGenerateOptions { format?: 'A4' | 'Letter'; } export interface PdfDeliveryOptions { expiresIn?: number; filename?: string; /** 'sync' (default) genera y devuelve la URL; 'async' encola un job (ADR-042). */ mode?: 'sync' | 'async'; } export interface PdfGenerateRequest { source: PdfSource; output?: PdfGenerateOptions; delivery?: PdfDeliveryOptions; } export interface PdfResult { jobId: string; status: 'completed'; url: string; expiresAt: string; } export type PdfJobStatus = 'queued' | 'processing' | 'completed' | 'failed'; /** Respuesta al encolar un job async (ADR-042). */ export interface PdfJobEnqueued { jobId: string; status: 'queued'; } /** * Estado de un job PDF async proyectado a Firestore por el admin Lambda * (apps/{appId}/orgs/{orgId}/pdf-jobs/{jobId}). Lo observa PdfService.watchJob(). * Extiende FirestoreDocument (id/createdAt/updatedAt los maneja Firestore). */ export interface PdfJob extends FirestoreDocument { jobId: string; appId: string; orgId: string; status: PdfJobStatus; url?: string; s3Key?: string; expiresAt?: string; elapsedMs?: number; caller?: string; }