package org.dashbuilder.client.widgets.dataset.editor.attributes;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import org.gwtbootstrap3.extras.toggleswitch.client.ui.ToggleSwitch;
import org.uberfire.mvp.Command;

import javax.enterprise.context.Dependent;

/**
 * <p>The Data Set refresh attributes editor view.</p>
 *
 * @since 0.4.0
 */
@Dependent
public class DataSetDefRefreshAttributesEditorView extends Composite implements DataSetDefRefreshAttributesEditor.View {

    interface Binder extends UiBinder<Widget, DataSetDefRefreshAttributesEditorView> {
        Binder BINDER = GWT.create(Binder.class);
    }

    DataSetDefRefreshAttributesEditor presenter;

    @UiField
    ToggleSwitch refreshEnabled;
    
    @UiField(provided = true)
    DataSetDefRefreshIntervalEditor.View refreshTimeView;

    @UiField(provided = true)
    IsWidget refreshOnStaleDataView;

    private HandlerRegistration handlerRegistration;
    
    @Override
    public void init(final DataSetDefRefreshAttributesEditor presenter) {
        this.presenter = presenter;
    }

    @Override
    public void initWidgets(final IsWidget enabledView, final DataSetDefRefreshIntervalEditor.View refreshTimeView) {
        this.refreshOnStaleDataView = enabledView;
        this.refreshTimeView = refreshTimeView;
        initWidget(Binder.BINDER.createAndBindUi(this));
    }

    @Override
    public void addRefreshEnabledButtonHandler(final Command handler) {
        
        if (handlerRegistration != null) {
            handlerRegistration.removeHandler();
        }
        
        handlerRegistration = refreshEnabled.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
            @Override
            public void onValueChange(final ValueChangeEvent<Boolean> event) {
                handler.execute();;
            }
        });
        
    }

    @Override
    public void setEnabled(final boolean isEnabled) {
        refreshEnabled.setValue(isEnabled);
    }
    
}