/*
 * Copyright (c) 2015
 *
 * This file is licensed under the Affero General Public License version 3
 * or later.
 *
 * See the COPYING-README file.
 *
 */

(function(OC) {

	/**
	 * @class OC.Files.FileInfo
	 * @classdesc File information
	 *
	 * @param {Object} data file data, see attributes for details
	 *
	 * @since 8.2
	 */
	var FileInfo = function(data) {
		var self = this;
		_.each(data, function(value, key) {
			if (!_.isFunction(value)) {
				self[key] = value;
			}
		});

		if (!_.isUndefined(this.id)) {
			this.id = parseInt(data.id, 10);
		}

		// TODO: normalize path
		this.path = data.path || '';

		if (this.type === 'dir') {
			this.mimetype = 'httpd/unix-directory';
		} else {
			this.mimetype = this.mimetype || 'application/octet-stream';
		}

		if (!this.type) {
			if (this.mimetype === 'httpd/unix-directory') {
				this.type = 'dir';
			} else {
				this.type = 'file';
			}
		}
	};

	/**
	 * @memberof OC.Files
	 */
	FileInfo.prototype = {
		/**
		 * File id
		 *
		 * @type int
		 */
		id: null,

		/**
		 * File name
		 *
		 * @type String
		 */
		name: null,

		/**
		 * Path leading to the file, without the file name,
		 * and with a leading slash.
		 *
		 * @type String
		 */
		path: null,

		/**
		 * Mime type
		 *
		 * @type String
		 */
		mimetype: null,

		/**
		 * Icon URL.
		 *
		 * Can be used to override the mime type icon.
		 *
		 * @type String
		 */
		icon: null,

		/**
		 * File type. 'file'  for files, 'dir' for directories.
		 *
		 * @type String
		 * @deprecated rely on mimetype instead
		 */
		type: null,

		/**
		 * Permissions.
		 *
		 * @see OC#PERMISSION_ALL for permissions
		 * @type int
		 */
		permissions: null,

		/**
		 * Modification time
		 *
		 * @type int
		 */
		mtime: null,

		/**
		 * Etag
		 *
		 * @type String
		 */
		etag: null,

		/**
		 * Mount type.
		 *
		 * One of null, "external-root", "shared" or "shared-root"
		 *
		 * @type string
		 */
		mountType: null,

		/**
		 * @type boolean
		 */
		hasPreview: true
	};

	if (!OC.Files) {
		OC.Files = {};
	}
	OC.Files.FileInfo = FileInfo;
})(OC);

