/**
 * PingNode view.
 *
 * @class
 * @extends ve.ce.LeafNode
 * @mixes ve.ce.FocusableNode
 *
 * @constructor
 * @param {DmMWPingNode} model Model to observe
 * @param {Object} [config] Configuration options
 */
function CeMWPingNode() {
	// Parent constructor
	CeMWPingNode.super.apply( this, arguments );

	// Mixin constructor
	ve.ce.FocusableNode.call( this );
}

/* Inheritance */

OO.inheritClass( CeMWPingNode, ve.ce.LeafNode );

OO.mixinClass( CeMWPingNode, ve.ce.FocusableNode );

/* Static Properties */

CeMWPingNode.static.name = 'mwPing';

CeMWPingNode.static.tagName = 'span';

CeMWPingNode.static.deleteCommandName = 'insertAndOpenMWUsernameCompletions';

CeMWPingNode.static.getDescription = function ( model ) {
	return model.getAttribute( 'user' );
};

/* Methods */

/**
 * @inheritdoc
 */
CeMWPingNode.prototype.initialize = function () {
	const model = this.getModel(),
		prefix = mw.msg( 'discussiontools-replywidget-mention-prefix' ),
		suffix = mw.msg( 'discussiontools-replywidget-mention-suffix' ),
		user = model.getAttribute( 'user' ),
		title = mw.Title.makeTitle( mw.config.get( 'wgNamespaceIds' ).user, user );

	// Parent method
	CeMWPingNode.super.prototype.initialize.call( this );

	// DOM changes
	const $link = $( '<a>' )
		.addClass( 'ext-discussiontools-ce-mwPingNode' )
		.attr( {
			href: title.getUrl(),
			title: user
		} )
		.text( model.getAttribute( 'user' ) );

	ve.init.platform.linkCache.styleElement(
		title.getPrefixedText(),
		$link
	);

	this.$element.append(
		prefix,
		$link,
		suffix
	);
};

/* Registration */

ve.ce.nodeFactory.register( CeMWPingNode );
