;(function (define, undefined) {
'use strict';
define([
    'gettext', 'underscore', 'js/edxnotes/views/note_group', 'js/edxnotes/views/tab_panel',
    'js/edxnotes/views/tab_view'
], function (gettext, _, NoteGroupView, TabPanelView, TabView) {
    var view = "Location in Course";
    var CourseStructureView = TabView.extend({
        PanelConstructor: TabPanelView.extend({
            id: 'structure-panel',
            title: view,

            renderContent: function () {
                var courseStructure = this.collection.getCourseStructure(),
                    container = document.createDocumentFragment();

                _.each(courseStructure.chapters, function (chapterInfo) {
                    var chapterView = this.getChapterGroupView(chapterInfo);
                    _.each(chapterInfo.children, function (location) {
                        var sectionInfo = courseStructure.sections[location],
                            sectionView;
                        if (sectionInfo) {
                            sectionView = chapterView.addChild(sectionInfo);
                            _.each(sectionInfo.children, function (location) {
                                var notes = courseStructure.units[location];
                                if (notes) {
                                    sectionView.addChild(this.getNotes(notes));
                                }
                            }, this);
                        }
                    }, this);
                    container.appendChild(chapterView.render().el);
                }, this);
                this.$el.append(container);
                return this;
            },

            getChapterGroupView: function (chapter, section) {
                var group = new NoteGroupView.ChapterView({
                    chapter: chapter,
                    section: section
                });
                this.children.push(group);
                return group;
            }
        }),

        tabInfo: {
            name: gettext('Location in Course'),
            identifier: 'view-course-structure',
            icon: 'fa fa-list-ul',
            view: view
        }
    });

    return CourseStructureView;
});
}).call(this, define || RequireJS.define);
