package authoritymanager.client;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.VerticalPanel;

public class AddPage extends VerticalPanel {
	private String configuration;
	private AuthorityManagerView view ;
	private AddWidget mainWidget ;
	private Button btnAdd, btnCancel ;
	private String pageType ;
	private String fieldID ;
	
	public AddPage(final AuthorityManagerView view, final String pageType, final String fieldID, String configuration) {
		super() ;
		this.pageType = pageType ;
		this.view = view ;
		this.configuration = configuration ;
		mainWidget = new AddWidget(view, configuration) ;
		this.add(mainWidget.getWidget()) ;
		HorizontalPanel pnlButtons = new HorizontalPanel() ;
		pnlButtons.setSpacing(5) ;
		this.add(pnlButtons) ;
		btnAdd = new Button("Add record", new ClickHandler() {
			public void onClick(ClickEvent event) {
				final DataSerial dataSerial = mainWidget.toDataSerial() ;
				AsyncCallback<String> callback = new AsyncCallback<String>() {
					public void onFailure(Throwable caught) {
					}
					public void onSuccess(final String resultID) {
						dataSerial.put(fieldID, resultID) ;
						AsyncCallback<Boolean> callbackAddData = new AsyncCallback<Boolean>() {
							public void onFailure(Throwable caught) {
								
							}
							public void onSuccess(Boolean resultAdding) {
								if (resultAdding.booleanValue()) {
									PopupPanel popResult = new PopupPanel(true) ;
									Label lblResult = new Label("Record #" + resultID + " added successfully!") ;
									popResult.add(lblResult) ;
									popResult.center() ;
									mainWidget.Reset() ;
								}
								else {
									PopupPanel popResult = new PopupPanel(true) ;
									Label lblResult = new Label("ERROR!") ;
									popResult.add(lblResult) ;
									popResult.center() ;
								}
							}
						} ;
						dataSerial.setType(pageType) ;
						view.getController().addRecord(dataSerial, callbackAddData) ;
					}
				} ;
				view.getController().createID(pageType, callback) ;
			}			
		}) ;
		pnlButtons.add(btnAdd) ;
		btnCancel = new Button("Cancel", new ClickHandler() {
			public void onClick(ClickEvent event) {
				mainWidget.Reset() ;
			}
		}) ;
		pnlButtons.add(btnCancel) ;
	}
	
	public String getPageType() {
		return this.pageType ;
	}
	public void ResetPage() {
		
	}
	private void initPage() {
		
	}
}
