package authoritymanager.client;

import java.util.Collection;
import java.util.Vector;

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.DialogBox;
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.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.VerticalPanel;

public class EditPage extends VerticalPanel {
	private static final int	DEFAULT_DIALOG_WIDTH	=	700 ;
	private static final int	DEFAULT_DIALOG_HEIGHT	=	600 ;
	
	private DialogBox dlgDisplay ;
	private VerticalPanel pnlDisplay;
	private String configuration;
	private AuthorityManagerView view ;
	private AddWidget mainWidget ;
	private Button btnSave, btnCancel ;
	private String pageType ;
	private String fieldID ;
	private String itemID ;
	
	public EditPage(final AuthorityManagerView view, final String pageType, final String fieldID, String configuration) {
		super() ;
		
		dlgDisplay = new DialogBox(false) ;
		dlgDisplay.setPixelSize(DEFAULT_DIALOG_WIDTH, DEFAULT_DIALOG_HEIGHT) ;
		dlgDisplay.setAnimationEnabled(true) ;
		dlgDisplay.setModal(true) ;
		dlgDisplay.setGlassEnabled(true) ;
		dlgDisplay.setText("Edit record...") ;
		
		pnlDisplay = new VerticalPanel();
		dlgDisplay.add(pnlDisplay);
		pnlDisplay.setPixelSize(DEFAULT_DIALOG_WIDTH, DEFAULT_DIALOG_HEIGHT);
		pnlDisplay.setSpacing(2);
		pnlDisplay.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
		pnlDisplay.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP);
		
		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) ;
		btnSave = new Button("Save changes", new ClickHandler() {
			public void onClick(ClickEvent event) {
				final DataSerial dataSerial = mainWidget.toDataSerial() ;
				dataSerial.setType(getPageType()) ;
				dataSerial.put("efgIdentifier", itemID) ;
				AsyncCallback<Void> callback = new AsyncCallback<Void>() {
					public void onFailure(Throwable caught) {
					}
					public void onSuccess(Void result) {
						PopupPanel popResult = new PopupPanel(true) ;
						Label lblResult = new Label("Changes saved successfully...") ;
						popResult.add(lblResult) ;
						popResult.center() ;
					}
				} ;
				view.getController().saveItem(dataSerial, callback) ;
			}			
		}) ;
		pnlButtons.add(btnSave) ;
		btnCancel = new Button("Cancel", new ClickHandler() {
			public void onClick(ClickEvent event) {
				//dlgDisplay.hide() ;
				view.showSearchResultsPage() ;
			}
		}) ;
		pnlButtons.add(btnCancel) ;
	}
	
	public String getPageType() {
		return this.pageType ;
	}
	public void ResetPage() {
		
	}
	private void initPage() {
		
	}

	public void show(DataSerial record) {
		mainWidget.Reset() ;
		Collection values = record.get("efgIdentifier") ;
		if (values == null) {
			this.itemID = "" ;
		}
		else {
			this.itemID = (String) values.iterator().next() ;
		}
		
		mainWidget.setData(record) ;
		//dlgDisplay.center() ;
	}
}
