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.Window;
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 String table;
    private String field;
    
    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) {

    	this.blacklist = blacklist;
    	this.field = field;
    	this.table = table;
        autoCompleteWidget = new eu.dnetlib.client.widgets.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) {

            	if(getValue()!=null)//an den exei prolavei na valei value
            		ValuesWidget.this.blacklist.remove(ValuesWidget.this.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 setTable(String table){
    	this.table = table;
    	autoCompleteWidget.setTable(table);
    }
    
    public void setField(String field){
    	this.field = field;
    	autoCompleteWidget.setField(field);
    }

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

    public void setValue(String value){
    	autoCompleteWidget.setValue(value);
    }
    
    public void setBlackList(ArrayList<String> blacklist){
    	this.blacklist = blacklist;
    	autoCompleteWidget.setBlackList(blacklist);
    }
    
    public String getValue() {
        return autoCompleteWidget.getValueSelected();
    }
}
