import { WasmProvider } from './wasm-provider'; import type { WindowWithCoherentPdf, CpdfInstance } from '@/types'; let cpdfLoaded = false; let cpdfLoadPromise: Promise | null = null; function getCpdfUrl(): string | undefined { const userUrl = WasmProvider.getUrl('cpdf'); if (userUrl) { const baseUrl = userUrl.endsWith('/') ? userUrl : `${userUrl}/`; return `${baseUrl}coherentpdf.browser.min.js`; } return undefined; } export function isCpdfAvailable(): boolean { return WasmProvider.isConfigured('cpdf'); } export async function isCpdfLoaded(): Promise { if (cpdfLoaded) return; if (cpdfLoadPromise) { return cpdfLoadPromise; } const cpdfUrl = getCpdfUrl(); if (!cpdfUrl) { throw new Error( 'CoherentPDF is not configured. Please configure it in WASM Settings.' ); } cpdfLoadPromise = new Promise((resolve, reject) => { if (typeof (window as WindowWithCoherentPdf).coherentpdf !== 'undefined') { cpdfLoaded = true; resolve(); return; } const script = document.createElement('script'); script.src = cpdfUrl; script.onload = () => { cpdfLoaded = true; console.log('[CPDF] Loaded from:', script.src); resolve(); }; script.onerror = () => { reject(new Error('Failed to load CoherentPDF library from: ' + cpdfUrl)); }; document.head.appendChild(script); }); return cpdfLoadPromise; } export async function getCpdf(): Promise { await isCpdfLoaded(); return (window as WindowWithCoherentPdf).coherentpdf as CpdfInstance; }