'use strict';
define(
    [
        'backgrid',
        'Settings/Quality/Profile/QualityProfileSchemaCollection',
        'Series/EpisodeFileModel'
    ], function (Backgrid, QualityProfileSchemaCollection, EpisodeFileModel) {
        return Backgrid.CellEditor.extend({

            className: 'quality-cell-editor',
            template : 'Cells/Edit/QualityCellEditorTemplate',
            tagName  : 'select',

            events: {
                'change': 'save',
                'blur': 'close',
                'keydown': 'close'
            },

            render: function () {
                var self = this;

                var qualityProfileSchemaCollection = new QualityProfileSchemaCollection();
                var promise = qualityProfileSchemaCollection.fetch();

                promise.done(function () {
                    var templateName = self.template;
                    self.schema = qualityProfileSchemaCollection.first();

                    var selected = _.find(self.schema.get('available'), { 'id': self.model.get(self.column.get("name")).quality.id });
                    selected.selected = true;

                    self.templateFunction = Marionette.TemplateCache.get(templateName);
                    var data = self.schema.toJSON();
                    var html = self.templateFunction(data);
                    self.$el.html(html);
                });

                return this;
            },

            save: function (e) {
                var model = this.model;
                var column = this.column;
                var selected = parseInt(this.$el.val());

                var quality = _.find(this.schema.get('available'), { 'id': selected });

                var newQuality = {
                    proper: false,
                    quality: quality
                };

                model.set(column.get("name"), newQuality);
                model.save();
                model.trigger("backgrid:edited", model, column, new Backgrid.Command(e));
            },

            close: function (e) {
                var model = this.model;
                var column = this.column;
                var command = new Backgrid.Command(e);

                model.trigger("backgrid:edited", model, column, command);
            }
        });
    });
