package eu.dnetlib.client.shared;

import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class GwtFieldLabel implements IsWidget {

	private VerticalPanel verticalPanel = new VerticalPanel();
	private HorizontalPanel horizontalPanel = new HorizontalPanel();
	private GwtLabelAlign align;
	private Label labelTitle;
	private Widget widget;
	private FlowPanel labelPanel = new FlowPanel();
	private boolean horizontalAlignLeft = true;

	public GwtFieldLabel(Widget widget, String labelTitle) {
		this.align = GwtLabelAlign.LEFT;
		this.labelTitle = new Label(labelTitle + ": ");
		this.widget = widget;
	}

	public GwtFieldLabel(Widget widget, String labelTitle, GwtLabelAlign align) {
		this.align = align;
		this.labelTitle = new Label(labelTitle + ": ");
		this.widget = widget;

	}

	public void setWidgetAlignCenter() {
		horizontalAlignLeft = false;
	}

	public Widget asWidget() {
		labelTitle.setStyleName("gwtLabels");
		this.labelPanel.addStyleName("fieldLabelPanel");
		if (align == GwtLabelAlign.LEFT) {
			horizontalPanel.add(labelTitle);
			horizontalPanel.add(widget);
			horizontalPanel.setCellVerticalAlignment(labelTitle, HasVerticalAlignment.ALIGN_MIDDLE);
			if (!horizontalAlignLeft) {
				horizontalPanel.setWidth("88%");
				horizontalPanel.setCellHorizontalAlignment(widget, HasHorizontalAlignment.ALIGN_CENTER);

			}
			labelPanel.add(horizontalPanel);
		} else {
			verticalPanel.add(labelTitle);
			verticalPanel.add(widget);
			verticalPanel.setCellHorizontalAlignment(widget, HasHorizontalAlignment.ALIGN_CENTER);
			verticalPanel.setWidth("100%");
			labelPanel.add(verticalPanel);
		}
		return labelPanel;

	}

	public FlowPanel getLabelPanel() {
		return labelPanel;
	}

	public void setPanelCentered() {
		if (labelPanel.getWidgetCount() > 0) {
			labelPanel.getWidget(0).addStyleName("center");
		}
	}

	public enum GwtLabelAlign {
		LEFT, TOP;
	}

	public GwtLabelAlign getAlign() {
		return align;
	}

	public void setAlign(GwtLabelAlign align) {
		this.align = align;
	}

	public void setVisible(boolean visible) {
		labelPanel.setVisible(visible);
	}

	public Label getLabelTitle() {
		return labelTitle;
	}

	public Widget getWidget() {
		return widget;
	}

}
