/*
 * #dependsFile client/zarafa/hierarchy/data/SharedFolderTypes.js
 */
Ext.namespace('Zarafa.hierarchy.dialogs');

/**
 * @class Zarafa.hierarchy.dialogs.SharedFolderContentPanel
 * @extends Zarafa.core.ui.ContentPanel
 * @xtype zarafa.sharedfoldercontentpanel
 */
Zarafa.hierarchy.dialogs.SharedFolderContentPanel = Ext.extend(Zarafa.core.ui.ContentPanel, {
	/**
	 * @cfg {Zarafa.hierarchy.data.SharedFolderTypes} defaultSelectedFolderType Default selected folder in combolist.
	 */
	defaultSelectedFolderType : Zarafa.hierarchy.data.SharedFolderTypes['ALL'],

	/**
	 * @cfg {Zarafa.core.data.IPMRecipientStore} store The store in which the user is stored which
	 * will contain the user whose store we wish to open.
	 */
	store : undefined,

	/**
	 * @constructor
	 * @param config Configuration structure
	 */
	constructor : function(config)
	{
		config = config || {};

		if (!config.store) {
			config.store = new Zarafa.core.data.IPMRecipientStore({
				allowResolvingToLocalContacts: false,
				allowResolvingToGABGroups: false
			});
		}

		config = Ext.applyIf(config, {
			// Override from Ext.Component
			xtype : 'zarafa.sharedfoldercontentpanel',
			layout: 'fit',
			title : _('Open Shared Folders'),
			width: 330,
			height: 250,
			items: [{
				xtype: 'zarafa.sharedfolderpanel',
				ref : 'sharedFolderPanel',
				store : config.store,
				defaultSelectedFolderType : config.defaultSelectedFolderType || this.defaultSelectedFolderType,
				buttons: [{
					text: _('Ok'),
					handler: this.onOk,
					scope: this
				},{ 
					text: _('Cancel'),
					handler: this.onCancel,
					scope: this
				}]
			}]
		});

		Zarafa.hierarchy.dialogs.SharedFolderContentPanel.superclass.constructor.call(this, config);
	},

	/**
	 * Event handler which is raised when the user clicks the "Ok" {@link Ext.Button button}
	 *
	 * This will apply the current categories to all {@link Zarafa.core.data.IPMRecord records}
	 * and will close the panel.
	 * @private
	 */
	onOk : function()
	{
		if (this.store && this.store.getCount() > 0) {
			var recipient = this.store.getAt(0);

			// If the recipient has not yet been resolved, then we should
			// wait until the store has correctly resolved the user.
			if (!recipient.isResolved() && !recipient.attemptedToResolve()) {
				this.mon(this.store, 'resolved', this.onOk, this, { single: true }); 
				return;
			}

			// Check if we have a valid user which has a store. When this is not the case
			// just show an error message and keep the panel open to allow the user
			// a second chance of entering a valid user.
			if (!recipient.isResolved()) {
				Ext.MessageBox.show({
					title: _('Kopano WebApp'),
					msg : String.format(_('Username \'{0}\' could not be resolved.'), recipient.get('display_name')),
					icon: Ext.MessageBox.ERROR,
					buttons: Ext.MessageBox.OK
				});
				return;
			} else if (recipient.get('display_type') !== Zarafa.core.mapi.DisplayType.DT_MAILUSER) {
				Ext.MessageBox.show({
					title: _('Kopano WebApp'),
					msg : String.format(_('Username \'{0}\' is not a valid user.'), recipient.get('display_name')),
					icon: Ext.MessageBox.ERROR,
					buttons: Ext.MessageBox.OK
				});
				return;
			} else if (recipient.get('email_address') === container.getUser().getEmailAddress()) {
				Ext.MessageBox.show({
					title: _('Kopano WebApp'),
					msg : _('It is not possible to open your own store twice'), 
					icon: Ext.MessageBox.ERROR,
					buttons: Ext.MessageBox.OK
				});
				return;
			}

			var name = recipient.get('email_address');
			var options = this.sharedFolderPanel.getFolderOptions();

			// Check if we are able to open the Shared Store, if not
			// it has already been opened.
			var opened = container.getHierarchyStore().open(name, options['type'], options['subfolders']);
			if (!opened) {
				Ext.MessageBox.show({
					title: _('Kopano WebApp'),
					msg :_('This shared folder is already open.'),
					icon: Ext.MessageBox.ERROR,
					buttons: Ext.MessageBox.OK
				});
			} else {
				this.close();
			}
		} else {
			Ext.MessageBox.show({
				title: _('Kopano WebApp'),
				msg :_('You must specify a username.'),
				icon: Ext.MessageBox.ERROR,
				buttons: Ext.MessageBox.OK
			});
		}
	},

	/**
	 * Event handler which is raised when the user clicks the "Cancel" {@link Ext.Button button}
	 *
	 * This will close the panel without saving
	 * @private
	 */
	onCancel : function()
	{
		this.close();
	}
});

Ext.reg('zarafa.sharedfoldercontentpanel', Zarafa.hierarchy.dialogs.SharedFolderContentPanel);
