package eu.dnetlib.enabling.ui.common.utils;

import java.util.HashMap;
import java.util.Map;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;


public abstract class GWTMainGeneric implements EntryPoint, ValueChangeHandler<String> {
	private static Map<String,String> countriesMap = new HashMap<String,String>();

	private GWTMenu menu;

	/**
	 * This is the entry point method.
	 */
	protected GWTMainGeneric(GWTMenu menu) {
		super();
		this.menu = menu;
	}

	@Override
	public void onModuleLoad() {
		
		RootPanel.get("noJSMessage").setVisible(false);
		
		RootPanel.get("menuTopLeft").add(menu);

		String initToken = History.getToken();
		if (initToken.length() == 0) initToken = menu.getDefaultToken();

		GWTPage page = menu.getPage(initToken);
		RootPanel.get("mainPage").clear();
		RootPanel.get("mainPage").add(page);
		page.refresh();

		History.addValueChangeHandler(this);

		GWTStubs.lookupService.loadCountries(new AsyncCallback<Map<String,String>>() {
			@Override
			public void onFailure(Throwable caught) {}
			@Override
			public void onSuccess(Map<String, String> result) {
				countriesMap = result;
			}
		});
	}

	public static Map<String, String> getCountriesMap() {
		return countriesMap;
	}

	public void setCountriesMap(Map<String, String> countriesMap) {
		GWTMainGeneric.countriesMap = countriesMap;
	}


	@Override
	public void onValueChange(ValueChangeEvent<String> event) {
		GWTPage page = menu.getPage(event.getValue());

		RootPanel.get("lowbar").clear();
		RootPanel.get("lowbar").add(new Label(page.getMenuItem()));
		RootPanel.get("mainPage").clear();
		RootPanel.get("mainPage").add(page);
		
		page.refresh();
	}

}
