"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
 * @module Properties
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.FormattedQuantityDescription = void 0;
const core_quantity_1 = require("@itwin/core-quantity");
const appui_abstract_1 = require("@itwin/appui-abstract");
const IModelApp_1 = require("../IModelApp");
/**
 * Base Quantity Property Description
 * @beta
 */
class FormattedQuantityDescription extends appui_abstract_1.BaseQuantityDescription {
    constructor(name, displayLabel, iconSpec) {
        super(name, displayLabel, iconSpec);
    }
    formatValue(numberValue) {
        if (this.formatterSpec) {
            return IModelApp_1.IModelApp.quantityFormatter.formatQuantity(numberValue, this.formatterSpec);
        }
        return numberValue.toFixed(2);
    }
    parseString(userInput) {
        if (this.parserSpec) {
            const parseResult = IModelApp_1.IModelApp.quantityFormatter.parseToQuantityValue(userInput, this.parserSpec);
            if (core_quantity_1.Parser.isParsedQuantity(parseResult)) {
                return { value: parseResult.value };
            }
            else {
                return { parseError: this.parseError };
            }
        }
        return { parseError: "no parser defined" };
    }
    get formatterSpec() {
        if (this._formatterSpec)
            return this._formatterSpec;
        const formatterSpec = IModelApp_1.IModelApp.quantityFormatter.findFormatterSpecByQuantityType(this.formatterQuantityType);
        if (formatterSpec) {
            this._formatterSpec = formatterSpec;
            return formatterSpec;
        }
        return undefined;
    }
    get parserSpec() {
        if (this._parserSpec)
            return this._parserSpec;
        const parserSpec = IModelApp_1.IModelApp.quantityFormatter.findParserSpecByQuantityType(this.formatterQuantityType);
        if (parserSpec) {
            this._parserSpec = parserSpec;
            return parserSpec;
        }
        return undefined;
    }
}
exports.FormattedQuantityDescription = FormattedQuantityDescription;
//# sourceMappingURL=FormattedQuantityDescription.js.map