'use strict';

define(
    [
        'backgrid',
        'Shared/Grid/HeaderCell'
    ], function (Backgrid, NzbDroneHeaderCell) {

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

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

                var self = this;
                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);

                            return self._comparator(leftVal, rightVal);
                        });
                    }
                    else {
                        this.sort(columnName, 'ascending', function (left, right) {
                            var leftVal = left.get(columnName);
                            var rightVal = right.get(columnName);

                            return self._comparator(rightVal, leftVal);
                        });
                    }
                }
            },

            _comparator: function (leftVal, rightVal) {
                var leftWeight = leftVal.quality.weight;
                var rightWeight = rightVal.quality.weight;

                if (!leftWeight && !rightWeight) {
                    return 0;
                }

                if (!leftWeight) {
                    return -1;
                }

                if (!rightWeight) {
                    return 1;
                }

                if (leftWeight === rightWeight) {
                    return 0;
                }

                if (leftWeight > rightWeight) {
                    return -1;
                }

                return 1;
            }
        });

        return Backgrid.QualityHeaderCell;
    });