// vim: et:ts=4:sw=4:sts=4:ft=javascript

'use strict';

pandora.ui.statusbar = function() {

    var $text = {
            titleTotal: Ox.Element('<span>').html('Total: '),
            total: Ox.Element('<span>'),
            titleSelected: Ox.Element('<span>').html(' &mdash; Selected: '),
            selected: Ox.Element('<span>'),
            loading: Ox.Element('<span>').html('Loading...')
        },

        that = Ox.Bar({size: 16})
            .css({
                textAlign: 'center'
            })
            .append(
                Ox.Element()
                    .css({
                        marginTop: '2px',
                        fontSize: '9px'
                    })
                    .append($text.loading)
                    .append($text.titleTotal)
                    .append($text.total)
                    .append($text.titleSelected)
                    .append($text.selected)
            );

    function getText(data) {
        var ui = pandora.user.ui,
            canSeeFiles = pandora.site.capabilities.canSeeFiles[pandora.user.level],
            canSeeSize = pandora.site.capabilities.canSeeSize[pandora.user.level],
            itemName = ui.listView == 'clip'
                ? (data.items == 1 ? 'Clip' : 'Clips')
                : (pandora.site.itemName[data.items == 1 ? 'singular' : 'plural']),
            parts = [];
        parts.push(Ox.formatNumber(data.items) + ' '+ itemName);
        if (data.runtime) {
            parts.push(Ox.formatDuration(data.runtime, 'short'));
        } else if (data.duration) {
            parts.push(Ox.formatDuration(data.duration, 'short'));
        }
        if (canSeeFiles) {
            data.files && parts.push(
                Ox.formatNumber(data.files) + ' file' + (data.files == 1 ? '' : 's')
            );
            data.duration && parts.push(Ox.formatDuration(data.duration));
        }
        if (canSeeSize) {
            data.size && parts.push(Ox.formatValue(data.size, 'B'));
        }
        if (canSeeFiles) {
            data.pixels && parts.push(Ox.formatValue(data.pixels, 'px'));
        }
        return parts.join(', ');
    }

    function setTotal() {
        pandora.api.find({
            query: pandora.user.ui.find,
            sort: pandora.user.ui.listSort
        }, function(result) {
            that.set('selected', {items: 0});
            that.set('total', result.data);
        });
    }

    that.set = function(key, data) {
        if (key == 'loading') {
            Ox.forEach($text, function($element, key) {
                $element[key == 'loading' ? 'show' : 'hide']();
            });
        } else {
            $text.loading.hide();
            if (key == 'selected') {
                if (data.items == 0) {
                    $text.titleTotal.hide();
                    $text.titleSelected.hide();
                    $text.selected.hide();
                } else {
                    $text.titleTotal.show();
                    $text.titleSelected.show();
                    $text.selected.html(getText(data)).show();
                }
            } else {
                $text.total.html(getText(data)).show();
            }
        }
    };

    that.bindEvent({
        pandora_find: function() {
            that.set('loading');
            if (['map', 'calendar'].indexOf(pandora.user.ui.listView) > -1) {
                setTotal();
            }
        },
        pandora_listview: function(data) {
            var isNavigationView = ['map', 'calendar'].indexOf(data.value) > -1,
                wasNavigationView = ['map', 'calendar'].indexOf(data.previousValue) > -1;
            that.set('loading');
            if (isNavigationView && !wasNavigationView) {
                setTotal();
            }
        }
    });

    that.set('loading');
    if (['map', 'calendar'].indexOf(pandora.user.ui.listView) > -1) {
        setTotal();
    }

    return that;

};

