package eu.dnetlib.client.widgets;

import com.github.gwtbootstrap.client.ui.ListBox;
import com.github.gwtbootstrap.client.ui.base.IconAnchor;
import com.github.gwtbootstrap.client.ui.constants.AlternateSize;
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;
import eu.dnetlib.goldoa.domain.PublicationIdentifier;

/**
 * Created by stefania on 3/11/15.
 */
public class IdentifierInfoWidget implements IsWidget {

    private FlowPanel identifierInfoPanel = new FlowPanel();

    private ListBox identifierTypes = new ListBox();
    private TextBox identifierValue = new TextBox();
    private IconAnchor deleteIcon = new IconAnchor();

    private DeleteIdentifierListener deleteIdentifierListener;

    public IdentifierInfoWidget() {

        identifierInfoPanel.addStyleName("identifierInfo");

        identifierTypes.addItem("Select type...", "noneSelected");
        identifierTypes.addItem("arXiv", "arxiv");
        identifierTypes.addItem("handle", "handle");
        identifierTypes.addItem("PMC", "pmc");
        identifierTypes.addItem("PubMed", "pubMed");
        identifierTypes.setAlternateSize(AlternateSize.LARGE);
        identifierTypes.addStyleName("inlineBlock");

        identifierValue.setAlternateSize(AlternateSize.LARGE);
        identifierValue.setPlaceholder(" value");
        identifierValue.addStyleName("inlineBlock");

        deleteIcon.setIcon(IconType.REMOVE);
        deleteIcon.addStyleName("inlineBlock");
        deleteIcon.addStyleName("deleteIcon");
        deleteIcon.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent clickEvent) {

                if(deleteIdentifierListener!=null)
                    deleteIdentifierListener.deleteIdentifier();
            }
        });

        identifierInfoPanel.add(identifierTypes);
        identifierInfoPanel.add(identifierValue);
        identifierInfoPanel.add(deleteIcon);
    }

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

    public interface DeleteIdentifierListener {
        public void deleteIdentifier();
    }

    public void setDeleteIdentifierListener(DeleteIdentifierListener deleteIdentifierListener) {
        this.deleteIdentifierListener = deleteIdentifierListener;
    }

    public boolean isComplete() {

        if(!identifierTypes.getValue().equals("noneSelected") && !identifierValue.getValue().trim().equals(""))
            return true;

        return false;
    }

    public PublicationIdentifier getPublicationIdentifier() {

        if(isComplete()) {

            PublicationIdentifier publicationIdentifier = new PublicationIdentifier();
            publicationIdentifier.setType(identifierTypes.getValue());
            publicationIdentifier.setValue(identifierValue.getValue().trim());
            return publicationIdentifier;
        }

        return null;
    }

    public void loadPublicationIdentifier(PublicationIdentifier publicationIdentifier) {

        if(publicationIdentifier.getType().equals("pmc") || publicationIdentifier.getType().equals("pubMed")
                || publicationIdentifier.getType().equals("arxiv") || publicationIdentifier.getType().equals("handle")) {
            identifierTypes.setSelectedValue(publicationIdentifier.getType());
            identifierValue.setValue(publicationIdentifier.getValue());
        }
    }
}
