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

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

            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 () {
                this._showMainView();
            },

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

                var series = SeriesCollection.get(this.model.get('seriesId'));
                var seriesTitle = series.get('title');
                var season = this.model.get('seasonNumber');
                var episode = this.model.get('episodeNumber');
                var message = seriesTitle + ' - ' + season + 'x' + FormatHelpers.pad(episode, 2);

                Actioneer.ExecuteCommand({
                    command   : 'episodeSearch',
                    properties: {
                        episodeId: this.model.get('id')
                    },
                    errorMessage: 'Search failed for: ' + message
                });

                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();
            }
        });

    });