package de.swm.mobile.kitchensink.client.showcase.widgets;

import java.io.IOException;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.text.shared.Renderer;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Widget;

import de.swm.commons.mobile.client.utils.Utils;
import de.swm.commons.mobile.client.widgets.DropDownItem;
import de.swm.commons.mobile.client.widgets.DropDownList;
import de.swm.commons.mobile.client.widgets.HeaderPanel;
import de.swm.commons.mobile.client.widgets.itf.IProvidesKeyAndValue;
import de.swm.mobile.kitchensink.client.Application;
import de.swm.mobile.kitchensink.client.base.ShowcaseDetailPage;

import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseSource;
import static de.swm.mobile.kitchensink.client.ShowcaseAnnotations.ShowcaseUiXML;

@ShowcaseSource
@ShowcaseUiXML({"DropDownListPage.ui.xml"})
public class DropDownListPage extends ShowcaseDetailPage {


	@UiField
	DropDownList<String> cars;
	@UiField
	HeaderPanel header;

	private static DropDownListPageUiBinder uiBinder = GWT.create(DropDownListPageUiBinder.class);

	@Override
	public HeaderPanel getHeaderPanel() {
		return header;
	}

	interface DropDownListPageUiBinder extends UiBinder<Widget, DropDownListPage> {
	}



	public DropDownListPage() {
		super(DropDownListPage.class);
		initWidget(uiBinder.createAndBindUi(this));
		Application.addDefaultBackButtonHanlder(header);
		cars.setKeyValueProvider(new IProvidesKeyAndValue<String>() {

			@Override
			public String getValue(String key) {
				return "Car " + key;
			}



			@Override
			public String getKey(String item) {
				String[] parts = item.split(" ");
				if (parts.length == 2) {
					return parts[1];
				}
				return "Unknown";
			}
		});
		cars.setRenderer(new Renderer<String>() {

			@Override
			public void render(String object, Appendable appendable) throws IOException {
				appendable.append(object);
			}



			@Override
			public String render(String object) {
				return object;
			}
		});
		for (int i = 0; i < 5; i++) {
			cars.add(new DropDownItem((i + 1) + ""));
		}
	}



	@UiHandler("cars")
	public void onValueChangeCar(ValueChangeEvent<String> e) {
		Utils.console(e.getValue());
	}



	@Override
	public String getName() {
		return "Drop down example";
	}

}