/**
 * @private
 * @author Sergei Lissovski <sergei.lissovski@modera.org>
 */
Ext.define('MF.activation.executioncontext.NestedExecutionContext', {
    extend: 'MF.activation.executioncontext.AbstractContext',

    requires: [
        'MF.Util'
    ],

    /**
     * @param {Object} config
     */
    constructor: function(config) {
        MF.Util.validateRequiredConfigParams(this, config, ['parentActivity', 'owningActivity']);

        Ext.apply(this, config);

        this.callParent(arguments);
    },

    // override
    bootstrap: function(callback) {
        var me = this;

        this.callParent([function() {
            var ec = me.parentActivity.getExecutionContext();

            var activityParams = Ext.clone(ec.getParams(me.parentActivity));
            delete activityParams[me.controllingParam];

            var params = {};
            params[me.owningActivity.getId()] = activityParams;

            me.stateObject = {
                section: '',
                params: params
            };

            me.on('transactioncommitted', function(ec, stateObject, token) {
                me.parentActivity.getExecutionContext().updateParams(
                    me.parentActivity,
                    stateObject.params[me.owningActivity.getId()]
                );
            });

            // TODO if some parameter is for nested activity is changed in URL (in case of BrowserHistoryContext)
            // then we need to fire "statechanged" event

            if (Ext.isFunction(callback)) {
                callback();
            }
        }]);
    }
});