'use strict';
define([
    'app', 'AddSeries/RootFolders/RootFolderCollection',
    'Quality/QualityProfileCollection',
    'AddSeries/Existing/UnmappedFolderModel',
    'AddSeries/Collection',
    'Series/SeriesModel'], function (app, rootFolders, qualityProfileCollection) {

    NzbDrone.AddSeries.Existing.FolderMatchResultView = Backbone.Marionette.ItemView.extend({
        template: 'AddSeries/SearchResultTemplate',

        ui: {
            qualityProfile: '.x-quality-profile'
        },

        events: {
            'click .x-add': 'addSeries'
        },

        initialize: function () {
            this.model.set('isExisting', true);
        },

        addSeries: function () {

            var self = this;

            var quality = this.ui.qualityProfile.val();
            var rootFolderId = this.options.rootFolder.id;
            var folder = this.options.folder.name;

            this.model.set('qualityProfileId', quality);
            this.model.set('rootFolderId', rootFolderId);
            this.model.set('folder', folder);

            this.model.save(undefined, {
                success: function () {
                    NzbDrone.Shared.Messenger.show({
                        message: 'Added: ' + self.model.get('title')
                    });

                    NzbDrone.vent.trigger(NzbDrone.Events.SeriesAdded, { existing: true, series: self.model });
                    self.trigger('seriesAdded');
                    self.close();
                }
            });
        }
    });

    NzbDrone.AddSeries.Existing.UnmappedFolderCompositeView = Backbone.Marionette.CompositeView.extend({

        template         : 'AddSeries/Existing/UnmappedFolderCompositeViewTemplate',
        itemViewContainer: '.x-folder-name-match-results',
        itemView         : NzbDrone.AddSeries.Existing.FolderMatchResultView,

        events: {
            'click .x-btn-search': 'search',
            'keydown .x-txt-search': 'keyDown'
        },

        ui: {
            searchButton: '.x-btn-search',
            searchText  : '.x-txt-search',
            profileList : '.x-lst-quality-profile'
        },

        initialize: function () {
            this.collection = new NzbDrone.AddSeries.Collection();
            this.collection.bind('reset', this.collectionReset, this);

            this.on("itemview:seriesAdded", function(){
                this.close();
            });
        },

        onRender: function () {
            this.resultView = new NzbDrone.AddSeries.SearchResultView({ collection: this.collection });
        },

        search: function () {
            var icon = this.ui.searchButton.find('icon');

            this.collection.reset();
            icon.removeClass('icon-search').addClass('icon-spin icon-spinner disabled');

            this.collection.fetch({
                data   : { term: this.ui.searchText.val() },
                success: function (collection) {
                    icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search');
                },
                fail   : function () {
                    icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search');
                }
            });
        },

        keyDown: function (e) {
            //Check for enter being pressed
            var code = (e.keyCode ? e.keyCode : e.which);
            if(code === 13) {
                this.search();
            }
        },

        collectionReset: function () {
            _.each(this.collection.models, function (model){
                model.set('isExisting', true);
            });
        },

        itemViewOptions: function () {
            return {
                qualityProfile: this.ui.profileList,
                rootFolder    : this.model.get('rootFolder'),
                folder        : this.model.get('folder')
            };
        }
    });

    NzbDrone.AddSeries.Existing.RootFolderCompositeView = Backbone.Marionette.CompositeView.extend({

        template         : "AddSeries/Existing/RootFolderCompositeViewTemplate",
        itemViewContainer: ".x-existing-folder-container",
        itemView         : NzbDrone.AddSeries.Existing.UnmappedFolderCompositeView,

        initialize: function () {

            if (!this.model) {
                throw "model is required.";
            }

            this.collection = new NzbDrone.AddSeries.Existing.UnmappedFolderCollection();
            this.refreshItems();
            this.listenTo(qualityProfileCollection, 'reset', this.refreshItems, this);
        },

        refreshItems: function () {
            this.collection.importItems(this.model);
        }
    });

    NzbDrone.AddSeries.Existing.ImportSeriesView = Backbone.Marionette.CollectionView.extend({

        itemView: NzbDrone.AddSeries.Existing.RootFolderCompositeView,

        initialize: function () {
            this.collection = rootFolders;
        }
    });
});