package com.curiam.client;

import java.util.ArrayList;

import com.curiam.client.componentes.Utiles;
import com.curiam.client.datos.ResultBeanTPB;
import com.curiam.client.interfaz.Interfaz_portada;
import com.curiam.client.llamada.GettingStarted;
import com.curiam.client.llamada.GreetingService;
import com.curiam.client.llamada.GreetingServiceAsync;
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.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.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.StackPanel;
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;




public class Analisis {
	
	
	public Analisis(final String usuario){
		
		//cargar stackpanel con los analisis del usuario
		final String user = "config/" + usuario + "/user.xml";
		
		Acceso a = new Acceso();
		final StackPanel panel = a.analizar_xml(user);
		
		//panel vertical superior de botones
		final HorizontalPanel hPanel = new HorizontalPanel();
	    hPanel.setSpacing(5);
	    hPanel.addStyleName("borde_base");
	    
	    
	    //boton crear nuevo caso
		final Button b_nuevo = new Button("Nuevo Analisis",
				
				new ClickHandler() {
					public void onClick(ClickEvent event) {
						
						Grid t_ext1 = (Grid) panel.getWidget(panel.getWidgetCount()-1);
						Grid t_ext2 = (Grid) t_ext1.getWidget(0, 1);
						Grid t_ext3 = (Grid) t_ext2.getWidget(0, 0);
						
						if(t_ext3.getWidget(0, 0)!=null){
							
							//lee el xml de resultados
							GreetingServiceAsync acc = GWT.create(GreetingService.class);
							acc.leerFichero(user, new AsyncCallback<String>() {
								
								public void onSuccess(String result) {
									if (result == null)
										Utiles.msj("Error", "No se ha cargado el archivo xml");
									else {
										Acceso a = new Acceso();
										
										final ArrayList<ResultBeanTPB> array_XML_result = a.parsear_resultados(result);
										a.solapa(panel,0, user,array_XML_result, null, null,true);
									}
								}
								public void onFailure(Throwable caught) {
									Utiles.msj("Error", "El servidor no responde.");
								}
						});
						
					}
				}
	    });
		
		//botón para acceder a la gestión de imagenes
		final Button b_imagen = new Button("Im&aacute;genes",
				
				new ClickHandler() {
					public void onClick(ClickEvent event) {
						
						final DialogBox db = new DialogBox();
						
						GettingStarted gs = new GettingStarted(db, user, panel);
					
					    db.setText("Panel Imagen");
					    db.setGlassEnabled(true);
					    db.setAnimationEnabled(true);
						
						db.center();
						db.show();
						
					}
	    });
		
		//botó para la eliminación de los casos
		final Button b_eliminar = new Button("Eliminar casos",
				
				new ClickHandler() {
					public void onClick(ClickEvent event) {
						final DialogBox del = new DialogBox(); 
						Grid vpbox = new Grid(2,1);
						Grid hpbox = new Grid(1,2);
						Utiles u = new Utiles();
						final Button b_acept = new Button(u.f("Aceptar"),
								
								new ClickHandler() {
									public void onClick(ClickEvent event) {
										del.hide();
										
										String datos = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
										datos += "<!-- Configuracion de usuario -->\n";
										datos += "<resultados>\n";
			    			    		datos += "</resultados>\n";
			    			    		
			    			    		RootPanel.get().clear();
			    			    		RootPanel.get().add(hPanel, 30, 20);
			    			    		
			    			    		for(int i=panel.getWidgetCount()-1;i>=0;i--){
			    			    			panel.remove(i);
			    			    		}
			    			   
			    			    		RootPanel.get().add(panel, 30, 70);
			    			    		
			    			    		
			    			    		Acceso ac = new Acceso();
			    			    		ac.escribirXML(user, datos);
			    			    		
			    			    		datos = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
										datos += "<!-- Configuracion de referencias -->\n";
										datos += "<refs>\n";
			    			    		datos += "</refs>\n";
			    			    		
			    			    		ac.escribirXML("config/" + usuario + "/ref.xml", datos);
										ac.solapa(panel,0,user,null, null, null,true);
									
										
									}
					    });
						final Button b_can = new Button(u.f("Cancelar"),
								
								new ClickHandler() {
									public void onClick(ClickEvent event) {
										del.hide();
									}
					    });
						
						CellFormatter cellFormatter = vpbox.getCellFormatter();
						cellFormatter.setHorizontalAlignment(1, 0,HasHorizontalAlignment.ALIGN_CENTER);

						
						hpbox.setCellSpacing(5);
						hpbox.setWidget(0, 0, b_acept);
						hpbox.setWidget(0, 1, b_can);
						
						vpbox.setCellSpacing(5);
						vpbox.setWidget(0, 0, new HTML("&iquest;Seguro que quiere borrar todos los an&aacute;lisis?"));
						vpbox.setWidget(1, 0, hpbox);
						
						del.setText("Advertencia");
						del.add(vpbox);
						
						del.setGlassEnabled(true);
					    del.setAnimationEnabled(true);
						del.center();
						del.show();
					}
	    });
		
		//boton para salir de la sesión actual
		final Button b_cerrar = new Button("Cerrar sesi&oacute;n",
				
				new ClickHandler() {
					public void onClick(ClickEvent event) {
						Interfaz_portada in_pr = new Interfaz_portada();
					}
	    });
		
		//botón que borra la cuenta del usuario
		final Button b_eliminar_pag = new Button("Eliminar cuenta",
				
				new ClickHandler() {
					public void onClick(ClickEvent event) {
						final DialogBox db = new DialogBox();
						db.setText("Eliminar cuenta");
						
						Grid tbase = new Grid(4,1);
						final PasswordTextBox pass = new PasswordTextBox();
						
						Utiles u = new Utiles();
						final Button b_ac = new Button(u.f("Aceptar"),
								
								new ClickHandler() {
									public void onClick(ClickEvent event) {
										Acceso ac = new Acceso();
										ac.comprovar_pass(usuario, pass.getText(),db);
										
									}
						});
						
						final Button b_can = new Button(u.f("Cancelar"),
								
								new ClickHandler() {
									public void onClick(ClickEvent event) {
										db.hide();
									}
						});
						
						HorizontalPanel hp = new HorizontalPanel();
						hp.add(b_ac);
						hp.add(new HTML("&nbsp;"));
						hp.add(b_can);
						
						CellFormatter cellFormatter = tbase.getCellFormatter();
						cellFormatter.setHorizontalAlignment(3, 0,HasHorizontalAlignment.ALIGN_CENTER);

						
						tbase.setWidget(0, 0, new HTML("Introduzca su contrase&ntilde;a actual"));
						tbase.setWidget(1, 0, pass);
						
						tbase.setWidget(3, 0, hp);
						
						db.add(tbase);
						
						db.setGlassEnabled(true);
					    db.setAnimationEnabled(true);
						db.center();
						db.show();
					}
	    });
		
		b_nuevo.setStyleName("vinculo_analisis");
		b_imagen.setStyleName("vinculo_analisis");
		b_eliminar.setStyleName("vinculo_analisis");
		b_cerrar.setStyleName("vinculo_analisis");
		b_eliminar_pag.setStyleName("vinculo_analisis");
		
		
		//elementos del panel de botones superior
		hPanel.add(new HTML("&nbsp;&nbsp;&nbsp;" + usuario + "&nbsp;&nbsp;&nbsp;"));
		hPanel.add(new HTML("|"));
		hPanel.add(b_nuevo);
		hPanel.add(new HTML("|"));
		hPanel.add(b_imagen);
		hPanel.add(new HTML("|"));
		hPanel.add(b_eliminar);
		hPanel.add(new HTML("|"));
		hPanel.add(b_cerrar);
		hPanel.add(new HTML("|"));
		hPanel.add(b_eliminar_pag);
		
	
		
		RootPanel.get().clear();
		RootPanel.get().setStyleName("fondo_blanco");
		RootPanel.get().add(hPanel, 30, 20);
		RootPanel.get().add(panel, 30, 70);
		}
	
}