// ASISMA CRM - Imprime una URL a PDF con Puppeteer (patron del OPS).
// Uso: node generar_pdf.js <url> <rutaSalida> [hostLocal]
//   hostLocal (opcional): dominio a resolver contra 127.0.0.1, para que
//   Puppeteer alcance el vhost local aunque el DNS publico no resuelva aqui.
const puppeteer = require('puppeteer');

async function generarPdf() {
    const url = process.argv[2];
    const rutaSalida = process.argv[3];
    const hostLocal = process.argv[4];

    if (!url || !rutaSalida) {
        console.error('Uso: node generar_pdf.js <url> <rutaSalida> [hostLocal]');
        process.exit(1);
    }

    const argumentos = [
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--ignore-certificate-errors'
    ];
    if (hostLocal) {
        argumentos.push('--host-rules="MAP ' + hostLocal + ' 127.0.0.1"');
    }

    let navegador;
    try {
        console.log('Iniciando captura de: ' + url);
        navegador = await puppeteer.launch({ headless: 'new', args: argumentos });

        const pagina = await navegador.newPage();
        pagina.on('pageerror', err => console.error('PAGE ERROR:', err.message));

        await pagina.setViewport({ width: 1200, height: 800 });

        const respuesta = await pagina.goto(url, { waitUntil: 'load', timeout: 60000 });
        if (!respuesta || !respuesta.ok()) {
            throw new Error('Fallo al cargar la página: ' + (respuesta ? respuesta.status() : 'sin respuesta'));
        }

        // Espera breve para fuentes/animaciones (igual que el OPS)
        await new Promise(resolver => setTimeout(resolver, 1500));

        await pagina.pdf({
            path: rutaSalida,
            format: 'A4',
            printBackground: true,
            margin: { top: '0mm', right: '0mm', bottom: '0mm', left: '0mm' },
            preferCSSPageSize: true
        });

        console.log('PDF generado exitosamente');
    } catch (error) {
        console.error('ERROR CRITICO:', error.message);
        process.exit(1);
    } finally {
        if (navegador) await navegador.close();
    }
}

generarPdf();
