"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ColXform = void 0;
const base_xform_1 = require("../base-xform.js");
const utils_1 = require("../../../../../utils/utils.js");
class ColXform extends base_xform_1.BaseXform {
    get tag() {
        return "col";
    }
    prepare(model, options) {
        const styleId = options.styles.addStyleModel(model.style || {});
        if (styleId) {
            model.styleId = styleId;
        }
    }
    render(xmlStream, model) {
        xmlStream.openNode("col");
        xmlStream.addAttribute("min", model.min);
        xmlStream.addAttribute("max", model.max);
        if (model.width) {
            xmlStream.addAttribute("width", model.width);
        }
        if (model.styleId) {
            xmlStream.addAttribute("style", model.styleId);
        }
        if (model.hidden) {
            xmlStream.addAttribute("hidden", "1");
        }
        if (model.bestFit) {
            xmlStream.addAttribute("bestFit", "1");
        }
        if (model.outlineLevel) {
            xmlStream.addAttribute("outlineLevel", model.outlineLevel);
        }
        if (model.collapsed) {
            xmlStream.addAttribute("collapsed", "1");
        }
        xmlStream.addAttribute("customWidth", "1");
        xmlStream.closeNode();
    }
    parseOpen(node) {
        if (node.name === "col") {
            const model = (this.model = {
                min: parseInt(node.attributes.min || "0", 10),
                max: parseInt(node.attributes.max || "0", 10),
                width: node.attributes.width === undefined ? undefined : parseFloat(node.attributes.width || "0")
            });
            if (node.attributes.style) {
                model.styleId = parseInt(node.attributes.style, 10);
            }
            if ((0, utils_1.parseBoolean)(node.attributes.hidden)) {
                model.hidden = true;
            }
            if ((0, utils_1.parseBoolean)(node.attributes.bestFit)) {
                model.bestFit = true;
            }
            if (node.attributes.outlineLevel) {
                model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);
            }
            if ((0, utils_1.parseBoolean)(node.attributes.collapsed)) {
                model.collapsed = true;
            }
            return true;
        }
        return false;
    }
    parseText() { }
    parseClose() {
        return false;
    }
    reconcile(model, options) {
        // reconcile column styles
        if (model.styleId !== undefined) {
            model.style = options.styles.getStyleModel(model.styleId);
        }
    }
}
exports.ColXform = ColXform;
