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

Zarafa.common.delegates.data.DelegateRecordFields = [
	{name: 'entryid', type: 'string'},
	{name: 'display_name', type: 'string'},
	{name: 'can_see_private', type: 'boolean', defaultValue: false},
	{name: 'has_meeting_rule', type: 'boolean', defaultValue: false},

	{name: 'rights_calendar', type: 'int'},
	{name: 'rights_tasks', type: 'int'},
	{name: 'rights_inbox', type: 'int'},
	{name: 'rights_contacts', type: 'int'},
	{name: 'rights_notes', type: 'int'},
	{name: 'rights_journal', type: 'int'}
];

/**
 * @class Zarafa.common.delegates.data.DelegateRecord
 * @extends Zarafa.core.data.MAPIRecord
 * 
 * Record will hold information about delegates.
 */
Zarafa.common.delegates.data.DelegateRecord = Ext.extend(Zarafa.core.data.MAPIRecord, {
	/**
	 * The base array of ID properties which is copied to the {@link #idProperties}
	 * when the record is being created.
	 * @property
	 * @type Array
	 * @private
	 */
	baseIdProperties : [ 'entryid' ],

	/**
	 * Copy the {@link Zarafa.common.delegates.data.DelegateRecord DelegateRecord} to a new instance
	 * @param {String} newId (optional) A new Record id, defaults to the id of the record being copied. See id.
	 * @return {Zarafa.common.delegates.data.DelegateRecord} The copy of the record.
	 */
	copy : function(newId)
	{
		var copy = Zarafa.core.data.RecordFactory.createRecordObjectByCustomType(Zarafa.core.data.RecordCustomObjectType.ZARAFA_DELEGATE, this.data, newId || this.id);

		copy.idProperties = this.idProperties.clone();
		copy.phantom = this.phantom;

		return copy.applyData(this);
	},

	/**
	 * Applies all data from an {@link Zarafa.common.delegates.data.DelegateRecord DelegateRecord}
	 * to this instance. This will update all data.
	 * 
	 * @param {Zarafa.common.delegates.data.DelegateRecord} record The record to apply to this
	 * @return {Zarafa.common.delegates.data.DelegateRecord} this
	 */
	applyData : function(record)
	{
		this.beginEdit();

		Ext.apply(this.data, record.data);
		Ext.apply(this.modified, record.modified);

		this.dirty = record.dirty;

		this.endEdit();

		return this;
	},

	/**
	 * Compare this {@link Zarafa.common.delegates.data.DelegateRecord DelegateRecord} instance
	 * with another one to see if they are same.
	 * 
	 * @param {Zarafa.common.delegates.data.DelegateRecord} record The Record to compare with
	 * @return {Boolean} True if the records are same.
	 */
	equals : function(record)
	{
		// Simplest case, do we have the same object...
		if (this === record) {
			return true;
		}

		return Zarafa.core.EntryId.compareABEntryIds(this.get('entryid'), record.get('entryid'));
	}
});

// Register a custom type to be used by the Record Factory
Zarafa.core.data.RecordCustomObjectType.addProperty('ZARAFA_DELEGATE');

Zarafa.core.data.RecordFactory.setBaseClassToCustomType(Zarafa.core.data.RecordCustomObjectType.ZARAFA_DELEGATE, Zarafa.common.delegates.data.DelegateRecord);
Zarafa.core.data.RecordFactory.addFieldToCustomType(Zarafa.core.data.RecordCustomObjectType.ZARAFA_DELEGATE, Zarafa.common.delegates.data.DelegateRecordFields);