define(['jquery', 'backbone', 'underscore', 'app', 'models/Package', 'collections/FileList', 'collections/PackageList'],
    function($, Backbone, _, App, Package, FileList, PackageList) {
        'use strict';

        // TreeCollection
        // A Model and not a collection, aggregates other collections
        return Backbone.Model.extend({

            defaults: {
                root: null,
                packages: null,
                files: null
            },

            initialize: function() {

            },

            fetch: function(options) {
                options || (options = {});
                var pid = options.pid || -1;

                options = App.apiRequest(
                    'getFileTree/' + pid,
                    {full: false},
                    options);

                console.log('Fetching package tree ' + pid);
                return Backbone.Model.prototype.fetch.call(this, options);
            },

            // Parse the response and updates the collections
            parse: function(resp) {
                var ret = {};
                if (!this.has('packages'))
                    ret.packages = new PackageList(_.values(resp.packages));
                else
                    this.get('packages').set(_.values(resp.packages));

                if (!this.has('files'))
                    ret.files = new FileList(_.values(resp.files));
                else
                    this.get('files').set(_.values(resp.files));

                ret.root = new Package(resp.root);
                return ret;
            }

        });
    });