'use strict';

define(
    [
        'backgrid'
    ], function (Backgrid) {

        Backgrid.NzbDroneHeaderCell = Backgrid.HeaderCell.extend({
            events: {
                'click': 'onClick'
            },

            render: function () {
                this.$el.empty();
                this.$el.append(this.column.get('label'));

                if (this.column.get('sortable')) {
                    this.$el.addClass('sortable');
                    this.$el.append(' <i class="pull-right"></i>');

                    if (this.collection.state) {
                        var sortKey = this.collection.state.sortKey;
                        var sortDir = this._convertIntToDirection(this.collection.state.order);

                        if (sortKey === this.column.get('name')) {
                            this.$el.children('i').addClass(this._convertDirectionToIcon(sortDir));
                            this._direction = sortDir;
                        }
                    }
                }
                this.delegateEvents();
                return this;
            },

            direction: function (dir) {
                if (arguments.length) {
                    if (this._direction) {
                        this.$el.children('i').removeClass(this._convertDirectionToIcon(this._direction));
                    }
                    if (dir) {
                        this.$el.children('i').addClass(this._convertDirectionToIcon(dir));
                    }
                    this._direction = dir;
                }

                return this._direction;
            },

            onClick: function (e) {
                e.preventDefault();

                var columnName = this.column.get('name');

                if (this.column.get('sortable')) {
                    if (this.direction() === 'ascending') {
                        this.sort(columnName, 'descending', function (left, right) {
                            var leftVal = left.get(columnName);
                            var rightVal = right.get(columnName);
                            if (leftVal === rightVal) {
                                return 0;
                            }
                            else if (leftVal > rightVal) {
                                return -1;
                            }
                            return 1;
                        });
                    }
                    else {
                        this.sort(columnName, 'ascending', function (left, right) {
                            var leftVal = left.get(columnName);
                            var rightVal = right.get(columnName);
                            if (leftVal === rightVal) {
                                return 0;
                            }
                            else if (leftVal < rightVal) {
                                return -1;
                            }
                            return 1;
                        });
                    }
                }
            },

            _convertDirectionToIcon: function (dir) {
                if (dir === 'ascending') {
                    return 'icon-sort-up';
                }

                return 'icon-sort-down';
            },

            _convertIntToDirection: function (dir) {
                if (dir === '-1') {
                    return 'ascending';
                }

                return 'descending';
            }
        });

        return Backgrid.NzbDroneHeaderCell;
    });
