/*!
 * @copyright See AUTHORS.txt
 */

/**
 * Command to open the link inspector, unless the currently selected link's target is uneditable.
 *
 * @class
 * @extends ve.ui.Command
 *
 * @constructor
 */
ve.ui.MWLinkCommand = function VeUiMwLinkCommand() {
	// Parent constructor
	ve.ui.MWLinkCommand.super.apply( this, arguments );
};

/* Inheritance */

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

/* Methods */

/**
 * @inheritdoc
 */
ve.ui.MWLinkCommand.prototype.isExecutable = function ( fragment ) {
	if ( !ve.ui.MWLinkCommand.super.prototype.isExecutable.apply( this, arguments ) ) {
		return false;
	}

	const anns = fragment.getAnnotations( true );
	for ( const ann of anns.getAnnotationsByName( 'link/mwInternal' ).get() ) {
		if ( ann.getAttribute( 'hasGeneratedHref' ) ) {
			return false;
		}
	}

	return true;
};

/* Registration */

// Override VE core link commands
ve.ui.commandRegistry.register(
	new ve.ui.MWLinkCommand(
		'link', 'window', 'open',
		{ args: [ 'link' ], supportedSelections: [ 'linear' ] }
	)
);
ve.ui.commandRegistry.register(
	new ve.ui.MWLinkCommand(
		'linkNoExpand', 'window', 'open',
		{ args: [ 'link', { noExpand: true } ], supportedSelections: [ 'linear' ] }
	)
);