define([
    '/common/curve.js',
    '/bower_components/chainpad-listmap/chainpad-listmap.js',
], function (Curve, Listmap) {
    var Edit = {};

    Edit.create = function (config, cb) { //network, channel, theirs, mine, cb) {
        var network = config.network;
        var channel = config.channel;
        var keys = config.keys;

        try {
            var encryptor = Curve.createEncryptor(keys);
            var lm = Listmap.create({
                network: network,
                data: {},
                channel: channel,
                readOnly: false,
                validateKey: keys.validateKey || undefined,
                crypto: encryptor,
                userName: 'lol',
                logLevel: 1,
            });

            var done = function () {
                // TODO make this abort and disconnect the session after the
                // user has finished making changes to the object, and they
                // have propagated.
            };

            lm.proxy
            .on('create', function () {
                console.log('created');
            })
            .on('ready', function () {
                console.log('ready');
                cb(lm, done);
            })
            .on('disconnect', function () {
                console.log('disconnected');
            })
            .on('change', [], function (o, n, p) {
                console.log(o, n, p);
            });
        } catch (e) {
            console.error(e);
        }
    };

    return Edit;
});