// Add custom borders and no-borders to the table itself
// Import from 'docx' rather than '../build' if you install from npm
import * as fs from "fs";
import {
    BorderStyle,
    Document,
    HeadingLevel,
    Packer,
    Paragraph,
    Table,
    TableBorders,
    TableCell,
    TableRow,
    TextDirection,
    VerticalAlign,
} from "../build";

const table = new Table({
    rows: [
        new TableRow({
            children: [
                new TableCell({
                    borders: {
                        top: {
                            style: BorderStyle.DASH_SMALL_GAP,
                            size: 1,
                            color: "ff0000",
                        },
                        bottom: {
                            style: BorderStyle.DASH_SMALL_GAP,
                            size: 1,
                            color: "ff0000",
                        },
                        left: {
                            style: BorderStyle.DASH_SMALL_GAP,
                            size: 1,
                            color: "ff0000",
                        },
                        right: {
                            style: BorderStyle.DASH_SMALL_GAP,
                            size: 1,
                            color: "ff0000",
                        },
                    },
                    children: [new Paragraph("Hello")],
                }),
                new TableCell({
                    children: [],
                }),
            ],
        }),
        new TableRow({
            children: [
                new TableCell({
                    children: [],
                }),
                new TableCell({
                    children: [new Paragraph("World")],
                }),
            ],
        }),
    ],
});

// Using the no-border convenience object. It is the same as writing this manually:
// const borders = {
//     top: {
//         style: BorderStyle.NONE,
//         size: 0,
//         color: "auto",
//     },
//     bottom: {
//         style: BorderStyle.NONE,
//         size: 0,
//         color: "auto",
//     },
//     left: {
//         style: BorderStyle.NONE,
//         size: 0,
//         color: "auto",
//     },
//     right: {
//         style: BorderStyle.NONE,
//         size: 0,
//         color: "auto",
//     },
//     insideHorizontal: {
//         style: BorderStyle.NONE,
//         size: 0,
//         color: "auto",
//     },
//     insideVertical: {
//         style: BorderStyle.NONE,
//         size: 0,
//         color: "auto",
//     },
// };
const noBorderTable = new Table({
    borders: TableBorders.NONE,
    rows: [
        new TableRow({
            children: [
                new TableCell({
                    children: [new Paragraph({}), new Paragraph({})],
                    verticalAlign: VerticalAlign.CENTER,
                }),
                new TableCell({
                    children: [new Paragraph({}), new Paragraph({})],
                    verticalAlign: VerticalAlign.CENTER,
                }),
                new TableCell({
                    children: [new Paragraph({ text: "bottom to top" }), new Paragraph({})],
                    textDirection: TextDirection.BOTTOM_TO_TOP_LEFT_TO_RIGHT,
                }),
                new TableCell({
                    children: [new Paragraph({ text: "top to bottom" }), new Paragraph({})],
                    textDirection: TextDirection.TOP_TO_BOTTOM_RIGHT_TO_LEFT,
                }),
            ],
        }),
        new TableRow({
            children: [
                new TableCell({
                    children: [
                        new Paragraph({
                            text:
                                "Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah Blah",
                            heading: HeadingLevel.HEADING_1,
                        }),
                    ],
                }),
                new TableCell({
                    children: [
                        new Paragraph({
                            text: "This text should be in the middle of the cell",
                        }),
                    ],
                    verticalAlign: VerticalAlign.CENTER,
                }),
                new TableCell({
                    children: [
                        new Paragraph({
                            text: "Text above should be vertical from bottom to top",
                        }),
                    ],
                    verticalAlign: VerticalAlign.CENTER,
                }),
                new TableCell({
                    children: [
                        new Paragraph({
                            text: "Text above should be vertical from top to bottom",
                        }),
                    ],
                    verticalAlign: VerticalAlign.CENTER,
                }),
            ],
        }),
    ],
});

const doc = new Document({
    sections: [{ children: [table, new Paragraph("Hello"), noBorderTable] }],
});

Packer.toBuffer(doc).then((buffer) => {
    fs.writeFileSync("My Document.docx", buffer);
});
