define([
    'jquery',
    '/common/common-util.js',
    '/customize/messages.js',
    'json!/common/translations/messages.json',
], function ($, Util, Messages, English) {

    var $body = $('body');

    var pre = function (text, opt) {
        return $('<pre>', opt).text(text);
    };

    var todo = function (missing) {
        var currentLang = "";
        var currentState = 1;

        if (missing.length) {
            $body.append(pre(missing.map(function (msg) {
                var res = "";
                var lang = msg[0];
                var key = msg[1]; // Array
                var state = msg[2]; // 0 === toDelete, 1 === missing, 2 === updated, 3 === invalid (wrong type)
                var value = msg[3] || '""';

                if (currentLang !== lang) {
                    if (currentLang !== "")
                    {
                        res += '\n';
                    }
                    currentLang = lang;
                    res += '/*\n *\n * ' + lang + '\n *\n */\n\n';
                }
                if (currentState !== state) {
                    currentState = state;
                    if (currentState === 0)
                    {
                        res += '\n// TODO: These keys are not needed anymore and should be removed ('+ lang + ')\n\n';
                    }
                }

                res += (currentState ? '' : '// ') + 'out.' + key.join('.') + ' = ' + value + ';';
                if (currentState === 1) {
                    res += ' // ' + JSON.stringify(Util.find(English, key));
                } else if (currentState === 2) {
                    res += ' // TODO: Key updated --> make sure the updated key "'+ value +'" exists and is translated before this one.';
                } else if (currentState === 3) {
                    res += ' // NOTE: this key has an invalid type! Original value: ' + JSON.stringify(Util.find(English, key));
                }
                return res;
            }).join('\n')));
        } else {
            $body.text('// All keys are present in all translations');
        }
    };
    Messages._checkTranslationState(todo);
});