/* globals $ */

var smapi = smapi || {};
var app;
smapi.logParser = function (data, sectionUrl) {
    // internal filter counts
    var stats = data.stats = {
        modsShown: 0,
        modsHidden: 0
    };
    function updateModFilters() {
        // counts
        stats.modsShown = 0;
        stats.modsHidden = 0;
        for (var key in data.showMods) {
            if (data.showMods.hasOwnProperty(key)) {
                if (data.showMods[key])
                    stats.modsShown++;
                else
                    stats.modsHidden++;
            }
        }
    }

    // set local time started
    if(data)
        data.localTimeStarted = ("0" + data.logStarted.getHours()).slice(-2) + ":" + ("0" + data.logStarted.getMinutes()).slice(-2);

    // init app
    app = new Vue({
        el: '#output',
        data: data,
        computed: {
            anyModsHidden: function () {
                return stats.modsHidden > 0;
            },
            anyModsShown: function () {
                return stats.modsShown > 0;
            }
        },
        methods: {
            toggleLevel: function (id) {
                if (!data.enableFilters)
                    return;

                this.showLevels[id] = !this.showLevels[id];
            },

            toggleMod: function (id) {
                if (!data.enableFilters)
                    return;

                var curShown = this.showMods[id];

                // first filter: only show this by default
                if (stats.modsHidden === 0) {
                    this.hideAllMods();
                    this.showMods[id] = true;
                }

                // unchecked last filter: reset
                else if (stats.modsShown === 1 && curShown)
                    this.showAllMods();

                // else toggle
                else
                    this.showMods[id] = !this.showMods[id];

                updateModFilters();
            },

            showAllMods: function () {
                if (!data.enableFilters)
                    return;

                for (var key in this.showMods) {
                    if (this.showMods.hasOwnProperty(key)) {
                        this.showMods[key] = true;
                    }
                }
                updateModFilters();
            },

            hideAllMods: function () {
                if (!data.enableFilters)
                    return;

                for (var key in this.showMods) {
                    if (this.showMods.hasOwnProperty(key)) {
                        this.showMods[key] = false;
                    }
                }
                updateModFilters();
            },

            filtersAllow: function(modId, level) {
                return this.showMods[modId] !== false && this.showLevels[level] !== false;
            }
        }
    });

    /**********
    ** Upload form
    *********/
    var input = $("#input");
    if (input.length) {
        // get elements
        var systemOptions = $("input[name='os']");
        var systemInstructions = $("div[data-os]");
        var submit = $("#submit");

        // instruction OS chooser
        var chooseSystem = function() {
            systemInstructions.hide();
            systemInstructions.filter("[data-os='" + $("input[name='os']:checked").val() + "']").show();
        }
        systemOptions.on("click", chooseSystem);
        chooseSystem();

        // disable submit if it's empty
        var toggleSubmit = function()
        {
            var hasText = !!input.val().trim();
            submit.prop("disabled", !hasText);
        }
        input.on("input", toggleSubmit);
        toggleSubmit();

        // drag & drop file
        input.on({
            'dragover dragenter': function(e) {
                e.preventDefault();
                e.stopPropagation();
            },
            'drop': function(e) {
                var dataTransfer = e.originalEvent.dataTransfer;
                if (dataTransfer && dataTransfer.files.length) {
                    e.preventDefault();
                    e.stopPropagation();
                    var file = dataTransfer.files[0];
                    var reader = new FileReader();
                    reader.onload = $.proxy(function(file, $input, event) {
                        $input.val(event.target.result);
                        toggleSubmit();
                    }, this, file, $("#input"));
                    reader.readAsText(file);
                }
            }
        });
    }
};