/**
 * Required parameters:
 * @param {RowModel} options.field: ViewSectionField (i.e. column) being edited.
 * @param {Object} options.cellValue: The value in the underlying cell being edited.
 * @param {String} options.editValue: String to be edited, or undefined to use cellValue.
 * @param {Number} options.cursorPos: The initial position where to place the cursor.
 * @param {Object} options.commands: Object mapping command names to functions, to enable as part
 *  of the command group that should be activated while the editor exists.
 */
function BaseEditor(options) {
}

/**
 * Called after the editor is instantiated to attach its DOM to the page.
 * - cellElem: The element representing the cell that this editor should match
 *   in size and position. Used by derived classes, e.g. to construct an EditorPlacement object.
 */
BaseEditor.prototype.attach = function(cellElem) {
  // No-op by default.
};

/**
 * Returns DOM container with the editor, typically present and attached after attach() has been
 * called.
 */
BaseEditor.prototype.getDom = function() {
  return null;
};

/**
 * Called to get the value to save back to the cell.
 */
BaseEditor.prototype.getCellValue = function() {
  throw new Error("Not Implemented");
};

/**
 * Used if an editor needs perform any actions before a save
 */
BaseEditor.prototype.prepForSave = function() {
  // No-op by default.
};

/**
 * Called to get the text in the editor, used when switching between editing data and formula.
 */
BaseEditor.prototype.getTextValue = function() {
  throw new Error("Not Implemented");
};

/**
 * Called to get the position of the cursor in the editor. Used when switching between editing
 * data and formula.
 */
BaseEditor.prototype.getCursorPos = function() {
  throw new Error("Not Implemented");
};

module.exports = BaseEditor;