package eu.dnetlib.client.widgets;

import java.util.ArrayList;

import com.github.gwtbootstrap.client.ui.base.IconAnchor;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;

public class ValuesWidget implements IsWidget {

    private FlowPanel valuesPanel = new FlowPanel();

    private AutoCompleteWidget autoCompleteWidget;
    private IconAnchor deleteIcon = new IconAnchor();
    private ArrayList<String> blacklist = new ArrayList<String>();
    
    private DeleteValueListener deleteValueListener;
    public interface SearchingListener {
    	public void onSearch();
    	public void onReturn();
    }
    
    private SearchingListener searchingListener;
    
    public void setSearchingListener(SearchingListener searchingListener){
    	this.searchingListener = searchingListener;
    }
    
    
    public ValuesWidget(String table, String field,final ArrayList<String> blacklist) {

        autoCompleteWidget = new AutoCompleteWidget("", "Search value...",table , field, blacklist);

        valuesPanel.addStyleName("valuesPanel");

        autoCompleteWidget.addStyleName("inlineBlock");

        deleteIcon.setIcon(IconType.REMOVE);
        deleteIcon.addStyleName("inlineBlock");
        deleteIcon.addStyleName("deleteIcon");
        deleteIcon.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent clickEvent) {
            	blacklist.remove(blacklist.indexOf(getValue()));
                if(deleteValueListener !=null)
                    deleteValueListener.deleteValue();
            }
        });
        
       	eu.dnetlib.client.widgets.AutoCompleteWidget.SearchingListener autoCompleteSearching = new eu.dnetlib.client.widgets.AutoCompleteWidget.SearchingListener() {
			
			@Override
			public void onSearch() {
				if(searchingListener!=null)
					searchingListener.onSearch();
			}
			
			@Override
			public void onReturn() {
				if(searchingListener!=null)
					searchingListener.onReturn();
			}
		}; 
		autoCompleteWidget.setSearchingListener(autoCompleteSearching);
        valuesPanel.add(autoCompleteWidget);
        valuesPanel.add(deleteIcon);
    }

    @Override
    public Widget asWidget() {
        return valuesPanel;
    }

    public interface DeleteValueListener {
        void deleteValue();
    }

    public void setDeleteValueListener(DeleteValueListener deleteValueListener) {
        this.deleteValueListener = deleteValueListener;
    }

    public String getValue() {
        return autoCompleteWidget.getValueSelected();
    }
}
