package authoritymanager.client;

import gwtupload.client.IUploader;
import gwtupload.client.MultiUploader;
import gwtupload.client.PreloadedImage;
import gwtupload.client.IUploadStatus.Status;
import gwtupload.client.PreloadedImage.OnLoadPreloadedImageHandler;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitHandler;

public class UploadPage extends Page {	
	FlowPanel pnlImages ;
	Panel pnlDisplay ;
	
	public UploadPage(AuthorityManagerView view) {
		super(view) ;
		
		pnlDisplay = new VerticalPanel() ;
		add(pnlDisplay) ;
		
		pnlImages = new FlowPanel();
		pnlDisplay.add(pnlImages) ;
		
		// Create a new uploader panel and attach it to the document
		MultiUploader defaultUploader = new MultiUploader();
		add(defaultUploader);

		// Add a finish handler which will load the image once the upload
		// finishes
		defaultUploader.addOnFinishUploadHandler(onFinishUploaderHandler);
		defaultUploader.addOnStatusChangedHandler(onStatusChangedHandler);
	}


	private IUploader.OnStatusChangedHandler onStatusChangedHandler = new IUploader.OnStatusChangedHandler() {
		@Override
		public void onStatusChanged(IUploader uploader) {
			// Status status = uploader.getStatus() ;

			// TODO Auto-generated method stub

		}
	};
	// Load the image in the document and in the case of success attach it to
	// the viewer
	private IUploader.OnFinishUploaderHandler onFinishUploaderHandler = new IUploader.OnFinishUploaderHandler() {
		public void onFinish(IUploader uploader) {
			if (uploader.getStatus() == Status.SUCCESS)
				new PreloadedImage(uploader.fileUrl(), showImage);
		}
	};

	// Attach an image to the pictures viewer
	private OnLoadPreloadedImageHandler showImage = new OnLoadPreloadedImageHandler() {
		public void onLoad(PreloadedImage image) {
			image.setWidth("75px");
			pnlImages.add(image);
		}
	};

	protected void cmdUpload2() {
		final FormPanel formPanel = new FormPanel();
		String action = GWT.getModuleBaseURL() + "fileupload";
		formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
		formPanel.setMethod(FormPanel.METHOD_POST);
		formPanel.setAction(action);

		// file upload field , set the name.
		FileUpload imageUploadField = new FileUpload();
		imageUploadField.setTitle("Change Picture");
		imageUploadField.setName("uploadpic");

		Button submitButton = new Button("Submit");
		submitButton.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				formPanel.submit();
			}
		});
		VerticalPanel pnlForm = new VerticalPanel();
		pnlForm.add(imageUploadField);
		pnlForm.add(submitButton);
		formPanel.add(pnlForm);

		formPanel.addSubmitHandler(new SubmitHandler() {
			@Override
			public void onSubmit(SubmitEvent event) {
				Window.alert("Sending!");
			}
		});
		formPanel.addSubmitCompleteHandler(new SubmitCompleteHandler() {
			@Override
			public void onSubmitComplete(SubmitCompleteEvent event) {
				// When the form submission is successfully completed, this
				// event is fired. Assuming the service returned a response of
				// type
				// text/html, we can get the result text here
				// Window.alert("Sent!") ;
				Window.alert(event.getResults());
			}
		});

		RootPanel.get().add(formPanel);
	}

}
