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

/**
 * UserInterface change view directionality tool.
 *
 * @class
 * @extends ve.ui.Tool
 * @constructor
 * @param {OO.ui.ToolGroup} toolGroup
 * @param {Object} [config] Configuration options
 */
ve.ui.ChangeDirectionalityTool = function VeUiChangeDirectionalityTool() {
	// Parent constructor
	ve.ui.ChangeDirectionalityTool.super.apply( this, arguments );

	this.modelDir = null;

	this.setDisabled( false );
};

/* Inheritance */

OO.inheritClass( ve.ui.ChangeDirectionalityTool, ve.ui.Tool );

/* Static Properties */

ve.ui.ChangeDirectionalityTool.static.name = 'changeDirectionality';

ve.ui.ChangeDirectionalityTool.static.group = 'utility';

ve.ui.ChangeDirectionalityTool.static.icon = 'textDirRTL';

ve.ui.ChangeDirectionalityTool.static.title =
	OO.ui.deferMsg( 'visualeditor-changedir-rtl' );

ve.ui.ChangeDirectionalityTool.static.autoAddToCatchall = false;

ve.ui.ChangeDirectionalityTool.static.commandName = 'changeDirectionality';

ve.ui.ChangeDirectionalityTool.static.deactivateOnSelect = false;

/* Methods */

/**
 * @inheritdoc
 */
ve.ui.ChangeDirectionalityTool.prototype.onUpdateState = function ( fragment ) {
	// Parent method
	ve.ui.ChangeDirectionalityTool.super.prototype.onUpdateState.apply( this, arguments );

	const modelDir = fragment.getDocument().getDir();

	if ( modelDir !== this.modelDir ) {
		// Icons used here textDirLTR, textDirRTL
		this.setIcon( 'textDir' + ( modelDir === 'ltr' ? 'RTL' : 'LTR' ) );
		// The following messages are used here:
		// * visualeditor-changedir-tool-ltr
		// * visualeditor-changedir-tool-rtl
		this.setTitle( ve.msg( 'visualeditor-changedir-tool-' + ( modelDir === 'ltr' ? 'rtl' : 'ltr' ) ) );
		this.modelDir = modelDir;
	}

	const viewDir = this.toolbar.getSurface().getView().getDocument().getDir();
	this.setActive( viewDir !== modelDir );
};

/* Registration */

ve.ui.toolFactory.register( ve.ui.ChangeDirectionalityTool );