var moment = require('moment');
var filesize = require('filesize');
var UiSettings = require('./UiSettingsModel');

module.exports = {
    bytes : function(sourceSize, sourceRounding) {
        var size = Number(sourceSize);
        var rounding = Number(sourceRounding);

        if (isNaN(size)) {
            return '';
        }

        if (isNaN(rounding)) {
            rounding = 1;
        }

        return filesize(size, {
            base  : 2,
            round : rounding
        });
    },

    relativeDate : function(sourceDate) {
        if (!sourceDate) {
            return '';
        }

        var date = moment(sourceDate);
        var calendarDate = date.calendar();

        //TODO: It would be nice to not have to hack this...
        var strippedCalendarDate = calendarDate.substring(0, calendarDate.indexOf(' at '));

        if (strippedCalendarDate) {
            return strippedCalendarDate;
        }

        if (date.isAfter(moment())) {
            return 'in ' + date.fromNow(true);
        }

        if (date.isBefore(moment().add('years', -1))) {
            return date.format(UiSettings.get('shortDateFormat'));
        }

        return date.fromNow();
    },

    pad : function(n, width, z) {
        z = z || '0';
        n = n + '';
        return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
    },

    number : function(input) {
        if (!input) {
            return '0';
        }

        return input.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
    },

    plural : function(input, unit) {
        if (input === 1) {
            return unit;
        }

        return unit + 's';
    }
};