'use strict';

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

        Backgrid.DateHeaderCell = 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) {
                if (!leftVal && !rightVal) {
                    return 0
                }

                if (!leftVal) {
                    return -1;
                }

                if (!rightVal) {
                    return 1
                }

                if (leftVal === rightVal) {
                    return 0;
                }

                if (leftVal > rightVal) {
                    return -1;
                }

                return 1;
            }
        });

        return Backgrid.DateHeaderCell;
    });