/**
 * An option widget for the page filter in PageFilterWidget
 *
 * @class
 * @extends OO.ui.OptionWidget
 * @mixes OO.ui.mixin.IconElement
 * @mixes OO.ui.mixin.TitledElement
 *
 * @constructor
 * @param {Object} [config={}]
 * @param {number} [config.count] Number of unread notifications
 * @param {boolean} [config.isCapped] The count for this widget is capped
 */
mw.echo.ui.PageNotificationsOptionWidget = function MwEchoUiPageNotificationsOptionWidget( config ) {
	config = config || {};

	// Parent constructor
	mw.echo.ui.PageNotificationsOptionWidget.super.call( this, config );
	// Mixin constructors
	OO.ui.mixin.IconElement.call( this, config );
	OO.ui.mixin.TitledElement.call( this, config );

	this.$label
		.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-title-label' );

	this.count = config.count !== undefined ? config.count : 0;

	let countLabel = mw.language.convertNumber( this.count );
	countLabel = config.isCapped ?
		mw.msg( 'echo-badge-count', countLabel ) : countLabel;

	this.unreadCountLabel = new OO.ui.LabelWidget( {
		classes: [ 'mw-echo-ui-pageNotificationsOptionWidget-label-count' ],
		label: countLabel,
	} );

	const $row = $( '<div>' )
		.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-row' )
		.append(
			$( '<div>' )
				.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-cell' )
				.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-title' )
				.append( this.$label ),
			$( '<div>' )
				.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-cell' )
				.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-count' )
				.append( this.unreadCountLabel.$element ),
		);

	// Initialization
	this.$element
		.addClass( 'mw-echo-ui-pageNotificationsOptionWidget' )
		.append( $row );

	if ( this.getIcon() ) {
		$row.prepend(
			$( '<div>' )
				.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-cell' )
				.addClass( 'mw-echo-ui-pageNotificationsOptionWidget-icon' )
				.append( this.$icon ),
		);
	}
};

/* Initialization */

OO.inheritClass( mw.echo.ui.PageNotificationsOptionWidget, OO.ui.OptionWidget );
OO.mixinClass( mw.echo.ui.PageNotificationsOptionWidget, OO.ui.mixin.IconElement );
OO.mixinClass( mw.echo.ui.PageNotificationsOptionWidget, OO.ui.mixin.TitledElement );

/**
 * Get the page count
 *
 * @return {number} Page count
 */
mw.echo.ui.PageNotificationsOptionWidget.prototype.getCount = function () {
	return this.count;
};

mw.echo.ui.PageNotificationsOptionWidget.prototype.setPressed = function ( state ) {
	mw.echo.ui.PageNotificationsOptionWidget.super.prototype.setPressed.call( this, state );
	if ( this.pressed ) {
		this.setFlags( 'progressive' );
	} else if ( !this.selected ) {
		this.clearFlags();
	}
	return this;
};

mw.echo.ui.PageNotificationsOptionWidget.prototype.setSelected = function ( state ) {
	mw.echo.ui.PageNotificationsOptionWidget.super.prototype.setSelected.call( this, state );
	if ( this.selected ) {
		this.setFlags( 'progressive' );
	} else {
		this.clearFlags();
	}
	return this;
};
