import { HeightRule, TableRowHeight } from "file/table/table-row/table-row-height";
import { IgnoreIfEmptyXmlComponent, XmlAttributeComponent, XmlComponent } from "file/xml-components";

export class TableRowProperties extends IgnoreIfEmptyXmlComponent {
    constructor() {
        super("w:trPr");
    }

    public setCantSplit(): TableRowProperties {
        this.root.push(new CantSplit());

        return this;
    }

    public setTableHeader(): TableRowProperties {
        this.root.push(new TableHeader());

        return this;
    }

    public setHeight(height: number, rule: HeightRule): TableRowProperties {
        this.root.push(new TableRowHeight(height, rule));

        return this;
    }
}

class CantSplitAttributes extends XmlAttributeComponent<{ readonly val: boolean }> {
    protected readonly xmlKeys = { val: "w:val" };
}

export class CantSplit extends XmlComponent {
    constructor() {
        super("w:cantSplit");
        this.root.push(new CantSplitAttributes({ val: true }));
    }
}

class TableHeaderAttributes extends XmlAttributeComponent<{ readonly val: boolean }> {
    protected readonly xmlKeys = { val: "w:val" };
}

export class TableHeader extends XmlComponent {
    constructor() {
        super("w:tblHeader");
        this.root.push(new TableHeaderAttributes({ val: true }));
    }
}
