import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.adapters.EditorSource;
import com.google.gwt.editor.client.adapters.SimpleEditor;
import com.google.gwt.i18n.client.Constants;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.requestfactory.gwt.client.RequestFactoryEditorDriver;

import OrganizationEntityParam.DataType;

public class OrgEntityTypeEditView extends Composite implements Editor<OrganizationEntityTypeProxy> {

	interface OrgEntityTypeEditViewUiBinder extends UiBinder<Widget, OrgEntityTypeEditView> {}
	public interface EditorDriver extends RequestFactoryEditorDriver<OrganizationEntityTypeProxy, OrgEntityTypeEditView>{}
	interface ParamsTableHeaders extends Constants {
		@DefaultStringValue("Nom du paramètre") String name();
		@DefaultStringValue("Type de la valeur") String dataType();
		@DefaultStringValue("Obligatoire?") String mandatory();
	}

	/**
	 * Editor of OrganizationEntityParamProxy.
	 * 
	 * @author tiago
	 * 
	 */
	static class ParamRowEditor extends EditableCellTable.SubEditor<OrganizationEntityParamProxy> {
		
		SimpleEditor<String> name;
		SimpleEditor<DataType> dataType;
		SimpleEditor<Boolean> mandatory;
		
		protected ParamRowEditor(EditableCellTable<OrganizationEntityParamProxy> cellTable, int indexInList) {
			super(cellTable, indexInList);
			defineEditorForColumn(0, name);
			defineEditorForColumn(1, dataType);
			defineEditorForColumn(2, mandatory);
		}
	}
	
	private static final OrgEntityTypeEditViewUiBinder UI_BINDER = GWT.create(OrgEntityTypeEditViewUiBinder.class);
	private static final ParamsTableHeaders tableHeaders = GWT.create(ParamsTableHeaders.class);
	
	@UiField TextBox name;
	@UiField(provided=true) EditableCellTable<OrganizationEntityParamProxy> acceptableParams = 
		new EditableCellTable<OrganizationEntityParamProxy>(new EditorSource<ParamRowEditor>() {
			@Override
			public ParamRowEditor create(int index) {
				return new ParamRowEditor(acceptableParams, index);
			}
		});
	@UiField @Ignore TextBox paramName;
//	@UiField(provided=true) @Ignore EnumListBox<DataType> paramType = new EnumListBox<DataType>(DataType.class, DATA_TYPE_LABELS);
//	@UiField @Ignore CheckBox paramMandatory;
//	@UiField Button btnNewParam;
//	@UiField Button btnSave;
	
	private EditorDriver editorDriver = GWT.create(EditorDriver.class);
//	private OrgEntityTypeEditActivity presenter;

	public OrgEntityTypeEditView() {
		initWidget(UI_BINDER.createAndBindUi(this));
		editorDriver.initialize(this);
		buildTable();
	}
	
	private void buildTable() {
//		acceptableParams.addEditTextColumn(tableHeaders.name());
//		acceptableParams.addEnumColumn(tableHeaders.dataType(), DataType.class, DATA_TYPE_LABELS);
//		acceptableParams.addCheckboxColumn(tableHeaders.mandatory());
	}
	
//	@UiHandler("btnNewParam")
//	void onClickNewParam(ClickEvent event) {
//		acceptableParams.getEditableList().add(
//				presenter.createParamInstance(paramName.getText(), paramType.getValue(), paramMandatory.getValue()));
//	}
	
//	public void setPresenter(OrgEntityTypeEditActivity presenter) {
//		this.presenter = presenter;
//	}
	
	public EditorDriver getEditorDriver() {
		return editorDriver;
	}
	
//	@UiHandler("btnSave")
//	void onClickSave(ClickEvent click) {
//		presenter.save();
//	}

}
