/*
 * #dependsFile client/zarafa/core/data/RecordFactory.js
 * #dependsFile client/zarafa/core/data/RecordCustomObjectType.js
 */
Ext.namespace('Zarafa.common.restoreitem.data');

Zarafa.common.restoreitem.data.RestoreItemRecordFields = [
	{ name: 'entryid' },
	{ name: 'parent_entryid' },
	{ name: 'store_entryid' },
	{ name: 'icon_index' },
	{ name: 'display_name' },
	{ name: 'deleted_on', type: 'date', dateFormat: 'timestamp', defaultValue: null },
	{ name: 'content_count', type: 'int', defaultValue: 0 },
	{ name: 'sender_name' },
	{ name: 'subject' },
	{ name: 'message_size', type: 'int', defaultValue: 0 },
	{ name: 'message_class' },
	{ name: 'object_type' },
	{ name: 'message_delivery_time', type: 'date', dateFormat: 'timestamp', defaultValue: null },
	{ name: 'message_flags', type: 'int', defaultValue: Zarafa.core.mapi.MessageFlags.MSGFLAG_READ },
	{ name: 'hasattach', type: 'boolean', defaultValue: false }
];

/**
 * @class Zarafa.common.restoreitem.data.RestoreItemRecord
 * @extends Zarafa.core.data.MAPIRecord
 */
Zarafa.common.restoreitem.data.RestoreItemRecord = Ext.extend(Zarafa.core.data.MAPIRecord, {

	/**
	 * This method is actually required by {@link Zarafa.common.ui.IconClass IconClass}.
	 * Icon class checks that folder is a default folder or not, but we can't have default
	 * folders in restore item store, so its not necessary to check for default folder.
	 * This function will always return false to make sure that icon class will properly
	 * work with restore records.
	 */
	getDefaultFolderKey : function()
	{
		return undefined;
	},

	/**
	 * Returns a {@link Zarafa.hierarchy.data.MAPIStoreRecord MAPIStoreRecord}
	 * @return {Zarafa.hierarchy.data.MAPIStoreRecord} MAPIStoreRecord
	 */
	getMAPIStore : function()
	{
		var store = container.getHierarchyStore();
		return store.getById(this.get('store_entryid'));
	},

	/**
	 * This method is actually required by {@link Zarafa.common.ui.IconClass IconClass}
	 * but ipmsubtree can never be deleted nor restored, so we can safely returns false
	 * and make this record behave properly with the iconclass
	 * @return {Boolean} false by default.
	 */
	isIPMSubTree : function()
	{
		return false;
	},

	/**
	 * Convenience method for determining if the message has been read or not.
	 * @return {Boolean} True if this item has been read.
	 */
	isRead : function()
	{
		if (Ext.isDefined(this.get('message_flags'))) {
			return (this.get('message_flags') & Zarafa.core.mapi.MessageFlags.MSGFLAG_READ) > 0;
		} else {
			return true;
		}
	}
});

// Register a custom type to be used by the Record Factory
Zarafa.core.data.RecordCustomObjectType.addProperty('ZARAFA_RESTOREITEM');
Zarafa.core.data.RecordFactory.addFieldToCustomType(Zarafa.core.data.RecordCustomObjectType.ZARAFA_RESTOREITEM, Zarafa.common.restoreitem.data.RestoreItemRecordFields);
Zarafa.core.data.RecordFactory.setBaseClassToCustomType(Zarafa.core.data.RecordCustomObjectType.ZARAFA_RESTOREITEM, Zarafa.common.restoreitem.data.RestoreItemRecord);