/*!
 * VisualEditor UserInterface HistoryCommand class.
 *
 * @copyright See AUTHORS.txt
 */

/**
 * UserInterface history command.
 *
 * @class
 * @extends ve.ui.Command
 *
 * @constructor
 * @param {string} name
 * @param {string} [method]
 */
ve.ui.HistoryCommand = function VeUiHistoryCommand( name, method ) {
	method = method || name;

	// Parent constructor
	ve.ui.HistoryCommand.super.call( this, name, 'history', method );

	this.checkMethod = {
		undo: 'canUndo',
		redo: 'canRedo'
	}[ method ];
};

/* Inheritance */

OO.inheritClass( ve.ui.HistoryCommand, ve.ui.Command );

/* Methods */

/**
 * @inheritdoc
 */
ve.ui.HistoryCommand.prototype.isExecutable = function ( fragment ) {
	const surface = fragment.getSurface();

	// Parent method
	return ve.ui.HistoryCommand.super.prototype.isExecutable.apply( this, arguments ) &&
		surface[ this.checkMethod ]();
};

/* Registration */

ve.ui.commandRegistry.register( new ve.ui.HistoryCommand( 'undo' ) );

ve.ui.commandRegistry.register( new ve.ui.HistoryCommand( 'redo' ) );