'use strict';

define(
    [
        'marionette',
        'Settings/DownloadClient/SabView',
        'Settings/DownloadClient/BlackholeView',
        'Settings/DownloadClient/PneumaticView',
        'Settings/DownloadClient/NzbgetView',
        'Mixins/AsModelBoundView',
        'Mixins/AutoComplete',
        'bootstrap'
    ], function (Marionette, SabView, BlackholeView, PneumaticView, NzbgetView, AsModelBoundView) {

        var view = Marionette.Layout.extend({
            template : 'Settings/DownloadClient/LayoutTemplate',

            regions: {
                downloadClient: '#download-client-settings-region'
            },

            ui: {
                downloadClientSelect: '.x-download-client',
                downloadedEpisodesFolder: '.x-path'
            },

            events: {
                'change .x-download-client': 'downloadClientChanged'
            },

            onShow: function () {
                this.sabView = new SabView({ model: this.model});
                this.blackholeView = new BlackholeView({ model: this.model});
                this.pneumaticView = new PneumaticView({ model: this.model});
                this.nzbgetView = new NzbgetView({ model: this.model});

                this.ui.downloadedEpisodesFolder.autoComplete('/directories');

                var client = this.model.get('downloadClient');
                this.refreshUIVisibility(client);
            },

            downloadClientChanged: function () {
                var clientId = this.ui.downloadClientSelect.val();
                this.refreshUIVisibility(clientId);
            },

            refreshUIVisibility: function (clientId) {

                if (!clientId) {
                    clientId = 'sabnzbd';
                }

                switch (clientId.toString()) {
                    case 'sabnzbd':
                        this.downloadClient.show(this.sabView);
                        break;

                    case 'blackhole':
                        this.downloadClient.show(this.blackholeView);
                        break;

                    case 'pneumatic':
                        this.downloadClient.show(this.pneumaticView);
                        break;

                    case 'nzbget':
                        this.downloadClient.show(this.nzbgetView);
                        break;

                    default :
                        throw 'unknown download client id' + clientId;
                }
            }
        });

        return AsModelBoundView.call(view);
    });