Ext.namespace('Zarafa.today');

/**
 * @class Zarafa.today.TodayContext
 * @extends Zarafa.core.Context
 * 
 * The today context presents an overview of tasks, notes, and appointments for today. The user can customise
 * the today view by adding and removing widgets. Widgets display information such as the aforementioned
 * daily overviews, but can also be made to display other things such as the time in various places in the world,
 * the weather, or a game.   
 */
Zarafa.today.TodayContext = Ext.extend(Zarafa.core.Context, {
	// Insertion points for this class
	/**
	 * @insert main.maintoolbar.view.today
	 * Insertion point for populating the main toolbar with a View button. This item is only visible
	 * when this context is active.
	 * @param {Zarafa.mail.TodayContext} context This context
	 */

	/**
 	 * @constructor
	 * @param config
	 */	 
	constructor : function(config)
	{
		// The tab in the top tabbar
		this.registerInsertionPoint('main.maintabbar.left', this.createMainTab, this);
		Zarafa.today.TodayContext.superclass.constructor.call(this, config);
	},

	/**
	 * @return {Zarafa.taday.TodayContextModel} the today context model
	 */
	getModel : function()
	{
		if (!Ext.isDefined(this.model)) {
			this.model = new Zarafa.today.TodayContextModel();
		}
		return this.model;
	},

	/**
	 * Bid for the given {@link Zarafa.hierarchy.data.MAPIFolderRecord folder}
	 * This will bid on the {@link Zarafa.hierarchy.data.MAPIFolderRecord#isIPMSubTree SubTree} folder.
	 *
	 * @param {Zarafa.hierarchy.data.MAPIFolderRecord} folder The folder for which the context is bidding
	 * @return {Number} 1 when the contexts supports the folder, -1 otherwise
	 */
	bid : function(folder)
	{
		if (folder.isOwnRoot()) {
			return 2;
		}

		return 0;
	},
	
	/**
	 * Obtain the {@link Zarafa.core.ui.widget.WidgetPanel WidgetPanel} object
	 *
	 * @return {Zarafa.core.ui.widget.WidgetPanel} The main panel which should
	 * be used within the {@link Zarafa.core.Context context}
	 */
	createContentPanel : function()
	{
		return {
			xtype: 'zarafa.widgetpanel',
			id: 'zarafa-mainpanel-contentpanel-today',
			settingsPath : 'zarafa/v1/contexts/today',
			showDefaultWidgets : ['mail', 'appointments', 'tasks'],
			context : this,
			collapsible : false,
			numColumns: container.getSettingsModel().get('zarafa/v1/contexts/today/num_columns')
		};
	},

	/**
	 * Returns the buttons for the dropdown list of the VIEW-button in the main toolbar. It will use the 
	 * main.maintoolbar.view.today insertion point to allow other plugins to add their items at the end.
	 * 
	 * @return {Ext.Component[]} an array of components
	 */
	getMainToolbarViewButtons : function()
	{
		var items = container.populateInsertionPoint('main.maintoolbar.view.today', this) || [];

		return items;
	},

	/**
	 * Adds a button to the top tab bar for this context.
	 * @return {Object} The button for the top tabbar 
	 * @private
	 */
	createMainTab: function()
	{
		return {
			text: this.getDisplayName(),
			tabOrderIndex: 1,
			context: this.getName(),
			id: 'mainmenu-button-today'
		};
	}
});

Zarafa.onReady(function() {
	container.registerContext(new Zarafa.core.ContextMetaData({
		name : 'today',
		displayName : _('Today'),
		allowUserVisible : false,
		pluginConstructor : Zarafa.today.TodayContext
	}));
});