/**
 * This is the window that allows configuring a label filter
 *
 * @private
 */
Ext.define('Ext.pivot.plugin.configurator.window.FilterLabel',{
    extend: 'Ext.pivot.plugin.configurator.window.Window',
    
    titleText:          'Label filter ({0})',
    fieldText:          'Show items for which the label',
    caseSensitiveText:  'Case sensitive',
 
    initComponent: function(){
        var me = this;
 
        me.callParent(arguments);
        me.setTitle(Ext.String.format(me.titleText, me.title));
    },
 
    getSettingsForm: function(){
        var me = this,
            items = me.filterFields || [];
        
        items.push({
            xtype:          'combo',
            editable:       false,
            queryMode:      'local',
            valueField:     'value',
            store:          me.store,
            name:           'operator',
            
            listeners: {
                change: function(combo, newValue){
                    var me = this,
                        hidden = me.isOperatorBetween(newValue);
 
                    me.down('#fValue').setVisible(!hidden);
                    me.down('#fValue').allowBlank = hidden;
                    me.down('#fFrom').setVisible(hidden);
                    me.down('#fFrom').allowBlank = !hidden;
                    me.down('#fTo').setVisible(hidden);
                    me.down('#fTo').allowBlank = !hidden;
                },
                scope:  me
            }
        },{
            itemId:     'fValue',
            xtype:      'textfield',
            margin:     '0 0 0 5',
            name:       'value'
        },{
            itemId:     'fFrom',
            xtype:      'textfield',
            margin:     '0 0 0 5',
            name:       'from'
        },{
            itemId:     'fTo',
            xtype:      'textfield',
            margin:     '0 0 0 5',
            name:       'to'
        });
        
        return Ext.apply(me.callParent(arguments), {
            items: [{
                xtype:  'hidden',
                name:   'type'
            },{
                xtype:          'fieldcontainer',
                labelSeparator: '',
                fieldLabel:     me.fieldText,
                labelAlign:     'top',
                layout: {
                    type: 'hbox',
                    align: 'stretch'
                },
 
                defaults: {
                    allowBlank: false,
                    flex:       1
                },
 
                items: items
            },{
                xtype:          'checkbox',
                boxLabel:       me.caseSensitiveText,
                name:           'caseSensitive'
            }]
        });
    },
 
    beforeApplySettings: function(settings){
        if(this.isOperatorBetween(settings.operator)){
            settings.value = [settings.from, settings.to];
        }
        delete(settings.from);
        delete(settings.to);
 
        settings.caseSensitive = (settings.caseSensitive === 'on');
        settings.topSort = (settings.topSort === 'on');
    },
    
    isOperatorBetween: function(operator){
        return Ext.Array.indexOf(['between', 'not between'], operator) >= 0;
    }
});