const fs = require('fs'); const path = require('path'); const axios = require('axios'); const logger = require('../utils/logger'); class PdfStorage { constructor(baseDir) { this.baseDir = baseDir || path.join(process.cwd(), 'data', 'pdfs'); this.sessionFile = path.join(this.baseDir, 'sessions.json'); this.ensureDir(); } ensureDir() { fs.mkdirSync(this.baseDir, { recursive: true }); } async downloadPdf(url) { const response = await axios.get(url, { responseType: 'arraybuffer' }); const fileName = `pdf-${Date.now()}-${Math.random().toString(36).slice(2)}.pdf`; const targetPath = path.join(this.baseDir, fileName); fs.writeFileSync(targetPath, response.data); return targetPath; } writeImageFile(buffer, pageIndex) { const fileName = `page-${pageIndex}-${Date.now()}-${Math.random().toString(36).slice(2)}.png`; const targetPath = path.join(this.baseDir, fileName); fs.writeFileSync(targetPath, buffer); return targetPath; } loadSessions() { try { if (!fs.existsSync(this.sessionFile)) return []; const raw = fs.readFileSync(this.sessionFile, 'utf8'); return JSON.parse(raw); } catch (e) { logger.error('Erreur lors du chargement des sessions PDF persistées:', e); return []; } } saveSessions(data) { try { fs.writeFileSync(this.sessionFile, JSON.stringify(data, null, 2), 'utf8'); } catch (e) { logger.error('Erreur lors de la sauvegarde des sessions PDF:', e); } } deleteFiles(paths) { paths.forEach(p => { if (p && fs.existsSync(p)) { try { fs.unlinkSync(p); } catch (e) { logger.warn('Erreur suppression fichier PDF/PNG', e); } } }); } } module.exports = PdfStorage;