import { scaleContent } from "./functions/scaleContent.js";
import { scalePage, PageSize } from "./functions/scalePage.js";
import * as exampleWorkflows from "./exampleWorkflows.js";
import { traverseOperations } from "./traverseOperations.js";
import * as Functions from "./functions.js";

(async () => {
    const workflowField = document.getElementById("workflow");

    const dropdown = document.getElementById("pdfOptions");
    // Clear existing options (if any)
    dropdown.innerHTML = '';

    // Iterate over the keys of the object and create an option for each key
    for (const key in exampleWorkflows) {
        const option = document.createElement('option');
        option.value = key;
        option.text = key;
        dropdown.appendChild(option);
    }
    
    const loadButton = document.getElementById("loadButton");
    loadButton.addEventListener("click", (e) => {
        workflowField.value = JSON.stringify(exampleWorkflows[dropdown.value], null, 2);
    });
    loadButton.click();

    const pdfFileInput = document.getElementById('pdfFile');
    const doneButton = document.getElementById("doneButton");

    doneButton.addEventListener('click', async (e) => {
        console.log("Starting...");

        const files = Array.from(pdfFileInput.files);
        const inputs = await Promise.all(files.map(async file => {
            return {
                originalFileName: file.name.replace(/\.[^/.]+$/, ""),
                fileName: file.name.replace(/\.[^/.]+$/, ""),
                buffer: new Uint8Array(await file.arrayBuffer())
            }
        }));
        console.log(inputs);

        const workflow = JSON.parse(workflowField.value);
        console.log(workflow);
        const traverse = traverseOperations(workflow.operations, inputs, Functions);

        let pdfResults;
        let iteration;
        while (true) {
            iteration = await traverse.next();
            if (iteration.done) {
                pdfResults = iteration.value;
                console.log(`data: processing done\n\n`);
                break;
            }
            console.log(`data: ${iteration.value}\n\n`);
        }
        
        // TODO: Zip if wanted
        pdfResults.forEach(result => {
            download(result.buffer, result.fileName, "application/pdf");
        });
    });
})();