const fs = require('fs/promises');
const puppeteer = require('puppeteer');

const args = process.argv.slice(2);

if (args.length < 2){
    console.log('Usage: html2pdf source options_json');
    process.exit(20);
}

const source = args[0];
const options = args.length === 2?JSON.parse(args[1]):{};

fs.readFile(source, {encoding: 'UTF-8'}).then(async function fileReadSuccess(sourceHTML){
    const browser = await puppeteer.launch({
        defaultViewport: {
            width: 1920,
            height: 1080
        }
    });

    const page = await browser.newPage();
    try {
        await page.setContent(sourceHTML, {
                timeout: 10000,
                waitUntil: 'networkidle0'
            }
        );
        await page.pdf(options);
        console.log('PDF Successfully written to ' + options.path);
        process.exitCode = 0;
    } catch (err){
        console.log('PDF Generation failed with error');
        console.log(err);
        process.exitCode = 30;
    } finally {
        await browser.close();
    }
});