### codetube
    Copyright (C) 2011 payload payload@lavabit.com
    Copyright (C) 2011 dodo dodo.the.last@gmail.com

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>
###

{ TreesView } = require '../view/trees'
{ Trees } = require '../collection/trees'

class TreesController

    constructor: (@client) ->
        @views = []

    initialize: () =>

    create: (i, table) =>
        trees = new Trees
        @views.push view = new TreesView
            el:$(table)
            model: trees
            owner: expose.owner
            project: expose.project
        @listen trees, view
        @fetch view

    fetch: ({ owner, project, view_model:{current_dir} }) =>
        @client.api.emit 'trees', { owner, project, path: current_dir }

    listen: (trees, view) =>
        @client.router.bind 'route:tree', (owner, project, branch, path) =>
            _.extend view, {owner, project, branch}
            view.view_model.current_dir = path
            current_path = (tree) ->
               tree.get('dirname') is path
            if trees.select(current_path).length < 2
                view.trigger 'show:progressbar'
                @fetch view
            view.render()

        @client.api.on 'tree', (raw_tree) =>
            view.trigger 'hide:progressbar'
            trees.add raw_tree



module.exports = { TreesController }

