/**
 * @private
 */
Ext.define('Ext.pivot.plugin.configurator.window.Window', {
    extend: 'Ext.window.Window',

    requires: [
        'Ext.form.Panel',
        'Ext.form.FieldContainer',
        'Ext.form.field.Text',
        'Ext.form.field.Hidden',
        'Ext.form.field.ComboBox',
        'Ext.layout.container.HBox'
    ],

    modal: true,
    closeAction: 'destroy',

    initComponent: function() {
        var me = this;

        Ext.apply(me, {
            layout: 'fit',

            items: [
                me.getSettingsForm()
            ],

            buttons: [{
                text: Ext.Msg.buttonText.ok,
                handler: me.applySettings,
                scope: me
            }, {
                text: Ext.Msg.buttonText.cancel,
                handler: me.cancelSettings,
                scope: me
            }]
        });

        return me.callParent(arguments);
    },

    /**
     * @method
     * Override to change settings before applying them. Return false to cancel changes.
     *
     * @param {Object} settings
     */
    beforeApplySettings: Ext.emptyFn,

    /**
     * Override to supply own form for settings
     */
    getSettingsForm: function() {
        return {
            xtype: 'form',
            bodyPadding: 5,
            items: []
        };
    },

    loadSettings: function(settings) {
        var form = this.down('form');

        if (form) {
            form.getForm().setValues(settings || {});
        }
    },

    applySettings: function() {
        var form = this.down('form'),
            settings;

        if (form && form.getForm().isValid()) {
            settings = form.getForm().getValues();

            if (this.beforeApplySettings(settings) !== false) {
                if (this.fireEvent('applysettings', this, settings) !== false) {
                    this.cancelSettings();
                }
            }
        }
    },

    cancelSettings: function() {
        this.close();
    }
});
