/*
 *  Copyright 2014 Anyware Services
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

/**
 * This class provides a combo box with local store for handling a boolean field. List options are: empty / yes / no.<br>
 * Labels of options are configurable. See {@link #cfg-emptyLabel}, {@link #cfg-trueLabel} and {@link #cfg-falseLabel}.
 * 
 * This widget is registered for fields of type Ametys.form.WidgetManager#TYPE_BOOLEAN.<br>
 */
Ext.define('Ametys.form.widget.BooleanCombobox', {
    extend: "Ext.form.field.ComboBox",
    
    /**
     * @cfg {String} [emptyLabel="-"] Label used for empty option 
     */
    emptyLabel: "{{i18n PLUGINS_CORE_UI_WIDGET_BOOLEAN_COMBOBOX_DEFAULT_EMPTY_LABEL}}",
    
    /**
     * @cfg {String} [trueLabel="yes"] Label used for 'true' option
     */
    trueLabel: "{{i18n PLUGINS_CORE_UI_WIDGET_BOOLEAN_COMBOBOX_DEFAULT_TRUE_LABEL}}",
    
    /**
     * @cfg {String} [falseLabel="no"] Label used for 'false' option
     */
    falseLabel: "{{i18n PLUGINS_CORE_UI_WIDGET_BOOLEAN_COMBOBOX_DEFAULT_FALSE_LABEL}}",
    
    constructor: function (config)
    {
        config = Ext.apply(config, {
            editable: false,
            forceSelection: true,
            triggerAction: 'all',
            
            queryMode: 'local',
            store: [
               ['', config.emptyLabel || "{{i18n PLUGINS_CORE_UI_WIDGET_BOOLEAN_COMBOBOX_DEFAULT_EMPTY_LABEL}}"],
               [true, config.trueLabel || "{{i18n PLUGINS_CORE_UI_WIDGET_BOOLEAN_COMBOBOX_DEFAULT_TRUE_LABEL}}"],
               [false, config.falseLabel || "{{i18n PLUGINS_CORE_UI_WIDGET_BOOLEAN_COMBOBOX_DEFAULT_FALSE_LABEL}}"]
            ]
        });
        
        config.value = (config.value === null || config.value === undefined) ? '' : config.value;  
        
        this.callParent(arguments);
    },
    
    getSubmitValue: function()
    {
        var value = this.getValue();
        if (Ext.isEmpty(value))
        {
            value = null;
        }
        else
        {
            value = value === true ? "true" : "false";
        }
        
        return value;
    }
});