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

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

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

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

            onShow: function () {
                this._releaseSearchActivated = false;
            },

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

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

                var seriesTitle = this.model.get('series').get('title');
                var season = this.model.get('seasonNumber');
                var episode = this.model.get('episodeNumber');
                var message = seriesTitle + ' - S' + season.pad(2) + 'E' + episode.pad(2);

                Messenger.show({
                    message: 'Search started for: ' + message
                });

                App.modalRegion.closeModal();
            },

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

                if (this._releaseSearchActivated) {
                    return;
                }

                var self = this;

                this.main.show(new SpinnerView());

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

                promise.done(function () {
                    if (!self.isClosed) {
                        self.main.show(new ManualSearchLayout({collection: releases}));
                    }
                });
            }
        });

    });