// replace table variables with WordFragments in a DOCX template

import {
    CreateDocx,
    OptionsImage,
    OptionsLink,
    OptionsParagraph,
    OptionsText,
    WordFragment,
} from "../../../build";
import * as fs from "fs";

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

const docx = new CreateDocx();
// load the template
docx.openTemplate(docxTemplate).then(docx => {
    // variables to be replaced in the document
    const rowA = new Map<string, string | WordFragment>();
    const wordFragmentTextA = new WordFragment();
    const textA: OptionsText = {
        bold: true,
        fontSize: 14,
        text: "Product A",
    };
    wordFragmentTextA.addText([textA]);
    const wordFragmentLinkA = new WordFragment();
    const linkA: OptionsLink = {
        link: "https://www.phpdocx.com",
        text: "phpdocx",
    };
    wordFragmentLinkA.addLink(linkA);
    rowA.set("ITEM", wordFragmentTextA);
    rowA.set("REFERENCE", wordFragmentLinkA);

    const rowB = new Map<string, string | WordFragment>();
    const wordFragmentTextB = new WordFragment();
    const textB: OptionsText = {
        bold: true,
        fontSize: 14,
        text: "Product B",
    };
    wordFragmentTextB.addText([textB]);
    const wordFragmentLinkB = new WordFragment();
    const linkB: OptionsLink = {
        link: "https://www.phpxlsx.com",
        text: "phpxlsx",
    };
    wordFragmentLinkB.addLink(linkB);
    rowB.set("ITEM", wordFragmentTextB);
    rowB.set("REFERENCE", wordFragmentLinkB);

    const rowC = new Map<string, string | WordFragment>();
    const wordFragmentTextC = new WordFragment();
    const textC: OptionsText = {
        bold: true,
        fontSize: 14,
        text: "Product C",
    };
    wordFragmentTextC.addText([textC]);
    const wordFragmentLinkC = new WordFragment();
    const linkC: OptionsLink = {
        link: "https://www.phppptx.com",
        text: "phppptx",
    };
    wordFragmentLinkC.addLink(linkC);
    rowC.set("ITEM", wordFragmentTextC);
    rowC.set("REFERENCE", wordFragmentLinkC);

    const rowD = new Map<string, string | WordFragment>();
    const wordFragmentTextD = new WordFragment();
    const textD: OptionsText = {
        bold: true,
        fontSize: 14,
        text: "Product D",
    };
    wordFragmentTextD.addText([textD]);
    const fileJpg = fs.readFileSync("../../files/image.jpg");
    const wordFragmentImageD = new WordFragment();
    const imageJpg: OptionsImage = {
        image: fileJpg,
    };
    const optionsImageParagraph: OptionsParagraph = {
        spacing: {
            after: 200,
        },
    };
    wordFragmentImageD.addImage(imageJpg, optionsImageParagraph);
    rowD.set("ITEM", wordFragmentTextD);
    rowD.set("REFERENCE", wordFragmentImageD);

    const variablesDocument: Map<string, string | WordFragment>[] = [
        rowA,
        rowB,
        rowC,
        rowD,
    ];

    // replace variables in the document target
    docx.replaceVariableTable([variablesDocument]);

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