'use strict';
define(
    [
        'underscore',
        'marionette',
        'backgrid',
        'vent',
        'Profile/ProfileCollection',
        'AddSeries/RootFolders/RootFolderCollection',
        'Shared/Toolbar/ToolbarLayout',
        'AddSeries/RootFolders/RootFolderLayout',
        'Series/Editor/Organize/OrganizeFilesView',
        'Config'
    ], function (_,
                 Marionette,
                 Backgrid,
                 vent,
                 Profiles,
                 RootFolders,
                 ToolbarLayout,
                 RootFolderLayout,
                 UpdateFilesSeriesView,
                 Config) {
        return Marionette.ItemView.extend({
            template: 'Series/Editor/SeriesEditorFooterViewTemplate',

            ui: {
                monitored           : '.x-monitored',
                profile             : '.x-profiles',
                seasonFolder        : '.x-season-folder',
                rootFolder          : '.x-root-folder',
                selectedCount       : '.x-selected-count',
                saveButton          : '.x-save',
                organizeFilesButton : '.x-organize-files',
                container           : '.series-editor-footer'
            },

            events: {
                'click .x-save'           : '_updateAndSave',
                'change .x-root-folder'   : '_rootFolderChanged',
                'click .x-organize-files' : '_organizeFiles'
            },

            templateHelpers: function () {
                return {
                    profiles   : Profiles,
                    rootFolders: RootFolders.toJSON()
                };
            },

            initialize: function (options) {
                this.seriesCollection = options.collection;

                RootFolders.fetch().done(function () {
                    RootFolders.synced = true;
                });

                this.editorGrid = options.editorGrid;
                this.listenTo(this.seriesCollection, 'backgrid:selected', this._updateInfo);
                this.listenTo(RootFolders, 'all', this.render);
            },

            onRender: function () {
                this._updateInfo();
            },

            _updateAndSave: function () {
                var selected = this.editorGrid.getSelectedModels();

                var monitored = this.ui.monitored.val();
                var profile = this.ui.profile.val();
                var seasonFolder = this.ui.seasonFolder.val();
                var rootFolder = this.ui.rootFolder.val();

                _.each(selected, function (model) {
                    if (monitored === 'true') {
                        model.set('monitored', true);
                    }

                    else if (monitored === 'false') {
                        model.set('monitored', false);
                    }

                    if (profile !== 'noChange') {
                        model.set('profileId', parseInt(profile, 10));
                    }

                    if (seasonFolder === 'true') {
                        model.set('seasonFolder', true);
                    }

                    else if (seasonFolder === 'false') {
                        model.set('seasonFolder', false);
                    }

                    if (rootFolder !== 'noChange') {
                        var rootFolderPath = RootFolders.get(parseInt(rootFolder, 10));

                        model.set('rootFolderPath', rootFolderPath.get('path'));
                    }

                    model.edited = true;
                });

                this.seriesCollection.save();
            },

            _updateInfo: function () {
                var selected = this.editorGrid.getSelectedModels();
                var selectedCount = selected.length;

                this.ui.selectedCount.html('{0} series selected'.format(selectedCount));

                if (selectedCount === 0) {
                    this.ui.monitored.attr('disabled', '');
                    this.ui.profile.attr('disabled', '');
                    this.ui.seasonFolder.attr('disabled', '');
                    this.ui.rootFolder.attr('disabled', '');
                    this.ui.saveButton.attr('disabled', '');
                    this.ui.organizeFilesButton.attr('disabled', '');
                }

                else {
                    this.ui.monitored.removeAttr('disabled', '');
                    this.ui.profile.removeAttr('disabled', '');
                    this.ui.seasonFolder.removeAttr('disabled', '');
                    this.ui.rootFolder.removeAttr('disabled', '');
                    this.ui.saveButton.removeAttr('disabled', '');
                    this.ui.organizeFilesButton.removeAttr('disabled', '');
                }
            },

            _rootFolderChanged: function () {
                var rootFolderValue = this.ui.rootFolder.val();
                if (rootFolderValue === 'addNew') {
                    var rootFolderLayout = new RootFolderLayout();
                    this.listenToOnce(rootFolderLayout, 'folderSelected', this._setRootFolder);
                    vent.trigger(vent.Commands.OpenModalCommand, rootFolderLayout);
                }
                else {
                    Config.setValue(Config.Keys.DefaultRootFolderId, rootFolderValue);
                }
            },

            _setRootFolder: function (options) {
                vent.trigger(vent.Commands.CloseModalCommand);
                this.ui.rootFolder.val(options.model.id);
                this._rootFolderChanged();
            },

            _organizeFiles: function () {
                var selected = this.editorGrid.getSelectedModels();
                var updateFilesSeriesView = new UpdateFilesSeriesView({ series: selected });
                this.listenToOnce(updateFilesSeriesView, 'updatingFiles', this._afterSave);

                vent.trigger(vent.Commands.OpenModalCommand, updateFilesSeriesView);
            }
        });
    });
