define([
    'app',
    'Quality/QualityProfileCollection',
    'Settings/Naming/NamingView',
    'Settings/Quality/QualityView',
    'Settings/Indexers/IndexersView',
    'Settings/DownloadClient/DownloadClientView',
    'Settings/Notifications/NotificationsView',
    'Settings/System/SystemView',
    'Settings/Misc/MiscView'
],
    function (app, qualityProfileCollection) {
        NzbDrone.Settings.SettingsLayout = Backbone.Marionette.Layout.extend({
            template: 'Settings/SettingsLayoutTemplate',

            regions: {
                naming: '#naming',
                quality: '#quality',
                indexers: '#indexers',
                downloadClient: '#download-client',
                notifications: '#notifications',
                system: '#system',
                misc: '#misc'
            },

            ui: {
                namingTab: '.x-naming-tab',
                qualityTab: '.x-quality-tab',
                indexersTab: '.x-indexers-tab',
                downloadClientTab: '.x-download-client-tab',
                notificationsTab: '.x-notifications-tab',
                systemTab: '.x-system-tab',
                miscTab: '.x-misc-tab'
            },

            events: {
                'click .x-naming-tab': 'showNaming',
                'click .x-quality-tab': 'showQuality',
                'click .x-indexers-tab': 'showIndexers',
                'click .x-download-client-tab': 'showDownloadClient',
                'click .x-notifications-tab': 'showNotifications',
                'click .x-system-tab': 'showSystem',
                'click .x-misc-tab': 'showMisc'
            },

            showNaming: function (e) {
                if (e) {
                    e.preventDefault();
                }

                this.ui.namingTab.tab('show');
                NzbDrone.Router.navigate('settings/naming');
            },

            showQuality: function (e) {
                if (e) {
                    e.preventDefault();
                }

                this.ui.qualityTab.tab('show');
                NzbDrone.Router.navigate('settings/quality');
            },

            showIndexers: function (e) {
                if (e) {
                    e.preventDefault();
                }

                this.ui.indexersTab.tab('show');
                NzbDrone.Router.navigate('settings/indexers');
            },

            showDownloadClient: function (e) {
                if (e) {
                    e.preventDefault();
                }

                this.ui.downloadClientTab.tab('show');
                NzbDrone.Router.navigate('settings/downloadclient');
            },

            showNotifications: function (e) {
                if (e) {
                    e.preventDefault();
                }

                this.ui.notificationsTab.tab('show');
                NzbDrone.Router.navigate('settings/notifications');
            },

            showSystem: function (e) {
                if (e) {
                    e.preventDefault();
                }

                this.ui.systemTab.tab('show');
                NzbDrone.Router.navigate('settings/system');
            },

            showMisc: function (e) {
                if (e) {
                    e.preventDefault();
                }

                this.ui.miscTab.tab('show');
                NzbDrone.Router.navigate('settings/misc');
            },

            initialize: function (context, action, query, settings) {
                this.settings = settings;

                if (action) {
                    this.action = action.toLowerCase();
                }

                if (query) {
                    this.query = query.toLowerCase();
                }
            },

            onRender: function () {
                qualityProfileCollection.fetch();

                this.naming.show(new NzbDrone.Settings.Naming.NamingView({model: this.settings}));
                this.quality.show(new NzbDrone.Settings.Quality.QualityView({model: this.settings}));
                this.indexers.show(new NzbDrone.Settings.Indexers.IndexersView({model: this.settings}));
                this.downloadClient.show(new NzbDrone.Settings.DownloadClient.DownloadClientView({model: this.settings}));
                this.notifications.show(new NzbDrone.Settings.Notifications.NotificationsView({model: this.settings}));
                this.system.show(new NzbDrone.Settings.System.SystemView({model: this.settings}));
                this.misc.show(new NzbDrone.Settings.Misc.MiscView({model: this.settings}));
            },

            onShow: function () {
                switch (this.action) {
                    case 'quality':
                        this.showQuality();
                        break;
                    case 'indexers':
                        this.showIndexers();
                        break;
                    case 'downloadclient':
                        this.showDownloadClient();
                        break;
                    case 'notifications':
                        this.showNotifications();
                        break;
                    case 'system':
                        this.showSystem();
                        break;
                    case 'misc':
                        this.showMisc();
                        break;
                    default:
                        this.showNaming();
                }
            }
        });
    });

