'use strict';
define(
    [
        'app',
        'marionette',
        'Episode/Search/ButtonsView',
        'Episode/Search/ManualLayout',
        'Release/Collection',
        'Series/SeriesCollection',
        'Commands/CommandController',
        'Shared/LoadingView'
    ], function (App, Marionette, ButtonsView, ManualSearchLayout, ReleaseCollection, SeriesCollection,CommandController, LoadingView) {

        return Marionette.Layout.extend({
            template: 'Episode/Search/EpisodeSearchLayoutTemplate',

            regions: {
                main: '#episode-search-region'
            },

            events: {
                'click .x-search-auto'  : '_searchAuto',
                'click .x-search-manual': '_searchManual',
                'click .x-search-back'  : '_showButtons'
            },

            initialize: function () {
                this.mainView = new ButtonsView();
            },

            onShow: function () {
                if (this.startManualSearch) {
                    this._searchManual();
                }

                else {
                    this._showMainView();
                }
            },

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

                CommandController.Execute('episodeSearch', {
                    episodeId: this.model.get('id')
                });

                App.vent.trigger(App.Commands.CloseModalCommand);
            },

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

                var self = this;

                this.mainView = new LoadingView();
                this._showMainView();

                var releases = new ReleaseCollection();
                var promise = releases.fetchEpisodeReleases(this.model.id);

                promise.done(function () {
                    if (!self.isClosed) {
                        self.mainView = new ManualSearchLayout({collection: releases});
                        self._showMainView();
                    }
                });
            },

            _showMainView: function () {
                this.main.show(this.mainView);
            },

            _showButtons: function () {
                this.mainView = new ButtonsView();
                this._showMainView();
            }
        });

    });
