define([], function () {
    // Start migration check
    // Versions:
    // 1: migrate pad attributes
    // 2: migrate indent settings (codemirror)

    return function (userObject, Cryptpad) {
        var version = userObject.version || 0;

        // DEPRECATED
        // Migration 1: pad attributes moved to filesData
        var migratePadAttributesToData = function () {
            return true;
        };
        if (version < 1) {
            migratePadAttributesToData();
        }

        // Migration 2: global attributes from root to 'settings' subobjects
        var migrateAttributes = function () {
            var drawer = 'cryptpad.userlist-drawer';
            var polls = 'cryptpad.hide_poll_text';
            var indentKey = 'cryptpad.indentUnit';
            var useTabsKey = 'cryptpad.indentWithTabs';
            var settings = userObject.settings = userObject.settings || {};
            if (typeof(userObject[indentKey]) !== "undefined") {
                settings.codemirror = settings.codemirror || {};
                settings.codemirror.indentUnit = userObject[indentKey];
                delete userObject[indentKey];
            }
            if (typeof(userObject[useTabsKey]) !== "undefined") {
                settings.codemirror = settings.codemirror || {};
                settings.codemirror.indentWithTabs = userObject[useTabsKey];
                delete userObject[useTabsKey];
            }
            if (typeof(userObject[drawer]) !== "undefined") {
                settings.toolbar = settings.toolbar || {};
                settings.toolbar['userlist-drawer'] = userObject[drawer];
                delete userObject[drawer];
            }
            if (typeof(userObject[polls]) !== "undefined") {
                settings.poll = settings.poll || {};
                settings.poll['hide-text'] = userObject[polls];
                delete userObject[polls];
            }
        };
        if (version < 2) {
            migrateAttributes();
            Cryptpad.feedback('Migrate-2', true);
            userObject.version = version = 2;
        }



        // Migration 3: language from localStorage to settings
        var migrateLanguage = function () {
            if (!localStorage.CRYPTPAD_LANG) { return; }
            var l = localStorage.CRYPTPAD_LANG;
            userObject.settings.language = l;
        };
        if (version < 3) {
            migrateLanguage();
            Cryptpad.feedback('Migrate-3', true);
            userObject.version = version = 3;
        }
    };
});
