/*! s.js (C) 2019-present SheetJS -- https://sheetjs.com */
/* vim: set ts=2: */
import { DefinedName } from "./DefinedName";
//import { Range } from "../Range";
export class WorkbookDefinedNameCollection {
    constructor(wb) {
        this._wb = wb;
    }
    ;
    /**
     * Get read-only array of global defined names
     */
    get items() {
        if (!this._wb.Workbook)
            return [];
        if (!this._wb.Workbook.Names)
            return [];
        return this._wb.Workbook.Names.filter((name) => { name.Sheet == null; }).map((name) => new DefinedName(name));
    }
    ;
    /**
     * Get defined name object
     */
    getName(name) {
        if (this._wb.Workbook && this._wb.Workbook.Names) {
            const names = this._wb.Workbook.Names;
            for (let i = 0; i < names.length; ++i) {
                if (names[i].Name.toLowerCase() != name.toLowerCase())
                    continue;
                if (names[i].Sheet != null)
                    continue;
                return new DefinedName(names[i]);
            }
        }
        throw new Error(`Cannot find defined name |${name}|`);
    }
    /**
     * Number of global defined names
     */
    get count() {
        if (!this._wb.Workbook)
            return 0;
        if (!this._wb.Workbook.Names)
            return 0;
        return this._wb.Workbook.Names.filter((name) => { typeof name.Sheet == "undefined"; }).length;
    }
    /**
     * Add or update defined name
     * @param name String name
     * @param ref Range object or string range/formula
     * @param comment Optional comment
     */
    add(name, ref /*TODO: | Range */, comment) {
        try {
            return this.getName(name);
        }
        catch (e) {
            const nm = { Name: name, Ref: ref.toString(), Comment: comment || "" };
            if (!this._wb.Workbook)
                this._wb.Workbook = {};
            if (!this._wb.Workbook.Names)
                this._wb.Workbook.Names = [];
            this._wb.Workbook.Names.push(nm);
            return new DefinedName(nm);
        }
    }
}
;
//# sourceMappingURL=WorkbookDefinedNameCollection.js.map