// replace text variables with external files in a DOCX template

import {
    CreateDocx,
    OptionsAltchunk,
    OptionsReplaceVariableExternalFile,
    WordFragment,
} from "../../../build";
import * as fs from "fs";

const docxTemplate = fs.readFileSync("../../files/TemplateVariables.docx");

const docx = new CreateDocx();
// load the template
docx.openTemplate(docxTemplate).then(docx => {
    const fileDocx = fs.readFileSync("../../files/Text.docx");
    const fileHtml = fs.readFileSync("../../files/Test.html");

    const externalFileDocxWordFragment = new WordFragment();
    const externalFileDocx: OptionsAltchunk = {
        file: fileDocx,
        type: "docx",
    };
    externalFileDocxWordFragment.addExternalFile(externalFileDocx);

    const externalFileHtmlWordFragment = new WordFragment();
    const externalFileHtml: OptionsAltchunk = {
        file: fileHtml,
        type: "html",
    };
    externalFileHtmlWordFragment.addExternalFile(externalFileHtml);

    // variables to be replaced
    const variablesDocument = new Map<string, WordFragment>();
    variablesDocument.set("VARNAME", externalFileDocxWordFragment);
    variablesDocument.set("OTHERVAR", externalFileHtmlWordFragment);

    // replace variables
    const optionsReplaceVariableExternalFile: OptionsReplaceVariableExternalFile =
        {
            firstMatch: true,
        };
    docx.replaceVariableExternalFile(
        variablesDocument,
        optionsReplaceVariableExternalFile
    );

    // save the DOCX
    docx.save().then(contents => {
        fs.writeFileSync(
            "replaceVariableExternalFile_1.docx",
            Buffer.from(contents)
        );
    });
});
