/*!
 * VisualEditor user interface MWEditingTabDialog class.
 *
 * @copyright See AUTHORS.txt
 * @license The MIT License (MIT); see LICENSE.txt
 */

mw.libs.ve = mw.libs.ve || {};
/**
 * Dialog for allowing new users to change editing tab preferences.
 *
 * @class
 * @extends OO.ui.MessageDialog
 *
 * @constructor
 * @param {Object} [config] Configuration options
 */
mw.libs.ve.EditingTabDialog = function MWLibsVEMWEditingTabDialog( config ) {
	// Parent constructor
	mw.libs.ve.EditingTabDialog.super.call( this, config );
};

/* Inheritance */

OO.inheritClass( mw.libs.ve.EditingTabDialog, OO.ui.MessageDialog );

/* Static Properties */

mw.libs.ve.EditingTabDialog.static.name = 'editingtab';

mw.libs.ve.EditingTabDialog.static.size = 'medium';

mw.libs.ve.EditingTabDialog.static.title = mw.msg( 'visualeditor-editingtabdialog-title' );

mw.libs.ve.EditingTabDialog.static.message = mw.msg( 'visualeditor-editingtabdialog-body' );

mw.libs.ve.EditingTabDialog.static.actions = [

	{
		action: 'prefer-wt',
		label: mw.msg( 'visualeditor-preference-tabs-prefer-wt' )
	},
	{
		action: 'prefer-ve',
		label: mw.msg( 'visualeditor-preference-tabs-prefer-ve' )
	},
	{
		action: 'multi-tab',
		label: mw.msg( 'visualeditor-preference-tabs-multi-tab' )
	},
	{
		label: mw.msg( 'visualeditor-editingtabdialog-ok' ),
		flags: [ 'progressive', 'primary' ]
	}
];

/* Methods */

/**
 * @inheritdoc
 */
mw.libs.ve.EditingTabDialog.prototype.getSetupProcess = function ( action ) {
	return mw.libs.ve.EditingTabDialog.super.prototype.getSetupProcess.call( this, action )
		.next( () => {
			// Same as ve.init.target.getLocalApi()
			new mw.Api().saveOption( 'visualeditor-hidetabdialog', 1 );
			mw.user.options.set( 'visualeditor-hidetabdialog', 1 );
		} );
};

/**
 * @inheritdoc
 */
mw.libs.ve.EditingTabDialog.prototype.getActionProcess = function ( action ) {
	if ( action ) {
		return new OO.ui.Process( () => {
			const actionWidget = this.getActions().get( { actions: action } )[ 0 ];
			actionWidget.pushPending();
			this.pushPending();

			// Same as ve.init.target.getLocalApi()
			new mw.Api().saveOption( 'visualeditor-tabs', action ).done( () => {
				actionWidget.popPending();
				mw.user.options.set( 'visualeditor-tabs', action );
				this.close( { action: action } );
			} );
		} );
	} else {
		// Parent method
		return mw.libs.ve.EditingTabDialog.super.prototype.getActionProcess.call( this, action );
	}
};