var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        if (typeof b !== "function" && b !== null)
            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
import { AcGePoint3d } from '@mlightcad/data-model';
import { AcEdPromptOptions } from './AcEdPromptOptions';
/**
 * Represents options for prompting the user to select a point, similar to
 * AutoCAD .NET `PromptPointOptions` and `PromptCornerOptions`.
 *
 * Supports specifying a base point, keywords, and how the message is displayed.
 */
var AcEdPromptPointOptions = /** @class */ (function (_super) {
    __extends(AcEdPromptPointOptions, _super);
    /**
     * Constructs a new `AcEdPromptPointOptions` with a given prompt message.
     * @param message - The message to show to the user in the prompt.
     */
    function AcEdPromptPointOptions(message, globalKeywords) {
        var _this = _super.call(this, message, globalKeywords) || this;
        _this._useBasePoint = false;
        _this._useDashedLine = false;
        _this._allowNone = false;
        return _this;
    }
    Object.defineProperty(AcEdPromptPointOptions.prototype, "basePoint", {
        /**
         * Gets or sets the base point used for relative selection.
         * In AutoCAD .NET, this is `PromptPointOptions.BasePoint`.
         * When `useBasePoint` is true, a rubber-band line will be drawn from the base point to the cursor.
         */
        get: function () {
            return this._basePoint;
        },
        set: function (point) {
            if (!this.isReadOnly) {
                if (point == null) {
                    this._basePoint = point;
                }
                else {
                    this._basePoint = this._basePoint
                        ? this._basePoint.copy(point)
                        : new AcGePoint3d(point);
                }
            }
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(AcEdPromptPointOptions.prototype, "useBasePoint", {
        /**
         * Gets or sets whether the base point should be used when prompting the next point.
         * In AutoCAD .NET, this is `PromptPointOptions.UseBasePoint`.
         * If true, the prompt will display a visual line from the base point to the cursor.
         */
        get: function () {
            return this._useBasePoint;
        },
        set: function (flag) {
            if (!this.isReadOnly) {
                this._useBasePoint = flag;
            }
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(AcEdPromptPointOptions.prototype, "useDashedLine", {
        /**
         * Gets or sets whether a dashed line should indicate the base point.
         * Corresponds to `PromptPointOptions.UseDashedLine`.
         */
        get: function () {
            return this._useDashedLine;
        },
        set: function (flag) {
            if (!this.isReadOnly) {
                this._useDashedLine = flag;
            }
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(AcEdPromptPointOptions.prototype, "allowNone", {
        /**
         * Gets or sets whether the user is allowed to press Enter to specify no point.
         * Corresponds to `PromptPointOptions.AllowNone` in AutoCAD .NET.
         */
        get: function () {
            return this._allowNone;
        },
        set: function (flag) {
            if (!this.isReadOnly) {
                this._allowNone = flag;
            }
        },
        enumerable: false,
        configurable: true
    });
    return AcEdPromptPointOptions;
}(AcEdPromptOptions));
export { AcEdPromptPointOptions };
//# sourceMappingURL=AcEdPromptPointOptions.js.map