'use strict';

define(
    [
        'app',
        'Cells/NzbDroneCell',
        'moment',
        'Shared/FormatHelpers'
    ], function (App, NzbDroneCell, Moment, FormatHelpers) {
        return  NzbDroneCell.extend({

            className: 'episode-status-cell',

            render: function () {
                this.$el.empty();

                if (this.model) {

                    var icon;
                    var tooltip;

                    var hasAired = Moment(this.model.get('airDateUtc')).isBefore(Moment());
                    var hasFile = this.model.get('hasFile');

                    if (hasFile) {
                        var episodeFile = App.request(App.Reqres.GetEpisodeFileById, this.model.get('episodeFileId'));

                        this.listenTo(episodeFile, 'change', this._refresh);

                        var quality = episodeFile.get('quality');
                        var size = FormatHelpers.bytes(episodeFile.get('size'));
                        var title = 'Episode downloaded';

                        if (quality.proper) {
                            title += ' [PROPER] - {0}'.format(size);
                            this.$el.html('<span class="badge badge-info" title="{0}">{1}</span>'.format(title, quality.quality.name));
                        }

                        else {
                            title += ' - {0}'.format(size);
                            this.$el.html('<span class="badge badge-inverse" title="{0}">{1}</span>'.format(title, quality.quality.name));
                        }

                        return this;
                    }
                    else {
                        if (this.model.get('downloading')) {
                            icon = 'icon-nd-downloading';
                            tooltip = 'Episode is downloading';
                        }

                        else if (!this.model.get('airDateUtc')) {
                            icon = 'icon-nd-tba';
                            tooltip = 'TBA';
                        }

                        else if (hasAired) {
                            icon = 'icon-nd-missing';
                            tooltip = 'Episode missing from disk';
                        }
                        else {
                            icon = 'icon-nd-not-aired';
                            tooltip = 'Episode has not aired';
                        }
                    }

                    this.$el.html('<i class="{0}" title="{1}"/>'.format(icon, tooltip));
                }

                return this;
            }
        });
    });