package com.curiam.client.interfaz;


/*************************************/
/***      Interfaz de registro     ***/
/*************************************/


import java.util.ArrayList;

import com.curiam.client.Acceso;
import com.curiam.client.componentes.Utiles;
import com.curiam.client.datos.nombreId;
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.DockPanel;
import com.google.gwt.user.client.ui.FlexTable;
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.HasVerticalAlignment;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;

public class Interfaz_registros {
	
	
	String datos = "";
	private String st_XML = null;
	private String passwordAdmin = null;
	
	/** estructura **/
	
	final DockPanel base = new DockPanel();
	final FlexTable vert = new FlexTable();
	final Grid tcentral = new Grid(5, 2);
	final HTML tsup = new HTML();

	
	/** campos de entrada **/
	
	
	final TextBox tb_user = new TextBox();
	final PasswordTextBox tb_pass = new PasswordTextBox();
	final PasswordTextBox tb_pass2 = new PasswordTextBox();
	
	
	
	ArrayList<nombreId> array_XML = new ArrayList<nombreId>();
	public Interfaz_registros(Image cabecera, Image pie){
		
		/** volver a inicio **/
		
		final Button b_portada = new Button("Curiam Home",
		
		new ClickHandler() {
			public void onClick(ClickEvent event) {
				
				Interfaz_portada ipor = new Interfaz_portada();
				
				
			}
		});	
		
		b_portada.setStyleName("vinculo");
		
		/** dimensionar objetos **/
		
		tb_user.setPixelSize(160, 22);
		tb_pass.setPixelSize(160, 22);
		tb_pass2.setPixelSize(160, 22);
	
		
		/** registro **/
		
		final Button acept = new Button("Aceptar",
			    new ClickHandler() {
			          public void onClick(ClickEvent event) {
			        	  
			        	  /** comprobaciones  **/
			        	  
			        	  if(tb_user.getText().length()<6 || tb_pass.getText().length()<6){
								Utiles.msj("Error", "El nombre de usuario y la contrase&ntilde;a deben contener almenos 6 car&aacute;cteres");
								return;
						  }
			        	  
			        	  for(int i=0;i<tb_user.getText().length();i++){
			        		  if(!(tb_user.getText().codePointAt(i)>=97 && tb_user.getText().codePointAt(i)<=122 || tb_user.getText().codePointAt(i)>=65 && tb_user.getText().codePointAt(i)<=90 || tb_user.getText().codePointAt(i)>=48 && tb_user.getText().codePointAt(i)<=57)){
			        			  Utiles.msj("Error", "El nombre de usuario y la contrase&ntilde;a no deben contener car&aacute;cteres especiales ni la letra &ntilde;");
			        			  return;
			        		  } 
			        	  }
			        	  
			        	  for(int i=0;i<tb_pass.getText().length();i++){
			        		  if(!(tb_pass.getText().codePointAt(i)>=97 && tb_pass.getText().codePointAt(i)<=122 || tb_pass.getText().codePointAt(i)>=65 && tb_pass.getText().codePointAt(i)<=90 || tb_pass.getText().codePointAt(i)>=48 && tb_pass.getText().codePointAt(i)<=57)){
			        				  Utiles.msj("Error", "El nombre de usuario y la contrase&ntilde;a no deben contener car&aacute;cteres especiales ni la letra &ntilde;");
			        				  return;
			        		  }
			        	  }
			        	  
						  if(!tb_pass.getText().equals(tb_pass2.getText())){
								Utiles.msj("Error", "La contrase&ntilde;a no coincide");
								return;
						  }
						   
						  
			        	  /** Leer el fichero usuarios.xml  **/
			        		 
			        		final String ruta = "config/usuarios.xml";
			        		
			        		GreetingServiceAsync acc = GWT.create(GreetingService.class);
			        		acc.leerFichero(ruta, 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();
			        					array_XML = a.parsear_usuarios(result);
			        					
			        					//si el usuario ya existe se informa al usuario 
			        					for(int i=0;i<array_XML.size();i++)
			        						if(array_XML.get(i).getNombre().equals(tb_user.getText())){
			        							Utiles.msj("Error", "El nombre de usuario ya existe");
			        							return;
			        						}
			        					
			    			        	datos = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
			    			    		datos += "<!-- Configuracion de escritorios -->\n";
			    			    		datos += "<escritorios>\n";
			    			    		
			    			    		int i;
			    			    		for(i=0;i<array_XML.size();i++){
			    			    			datos += "\t<escritorio>\n";
			    			    			datos += "\t\t<passwordUser>" + array_XML.get(i).getPassword() + "</passwordUser>\n";
			    			    			datos += "\t\t<nombre>" + array_XML.get(i).getNombre() + "</nombre>\n";
			    			    			datos += "\t\t<id>" + array_XML.get(i).getId() + "</id>\n";
			    			    			datos += "\t</escritorio>\n";
			    			    		}
			    			    		int cont = array_XML.size();
			    			    		datos += "\t<escritorio>\n";
			    		    			datos += "\t\t<passwordUser>" + tb_pass.getText() + "</passwordUser>\n";
			    		    			datos += "\t\t<nombre>" + tb_user.getText() + "</nombre>\n";
			    		    			datos += "\t\t<id>" + cont + "</id>\n";
			    		    			datos += "\t</escritorio>\n";
			    			    		
			    			    		
			    			    		datos += "</escritorios>";
			    			    		 
			    			    		//se crea la carpeta donde se guarda la informción del usuario
			    			    		
			    			    		GreetingServiceAsync acc = GWT.create(GreetingService.class);
			    			    		acc.crearDirectorio("config/"+tb_user.getText(), new AsyncCallback<Boolean>() {

											@Override
											public void onFailure(Throwable caught) {
												// TODO Auto-generated method stub
												Utiles.msj("Error", "El servidor no responde");
											}

											@Override
											public void onSuccess(Boolean result) {
												// TODO Auto-generated method stub
												if(result){
													String datos_user = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
						    			    		datos_user += "<!-- Configuracion de usuario -->\n";
						    			    		datos_user += "<resultados>\n";
						    			    		datos_user += "</resultados>\n";
						    			    		
						    			    		String usuario = "config/"+tb_user.getText()+"/user.xml";


						    			    		Acceso a = new Acceso();
						    			    		a.escribirXML(usuario, datos_user);
						    			    		
						    			    		datos_user = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
						    			    		datos_user += "<!-- Configuracion de referencias -->\n";
						    			    		datos_user += "<refs>\n";
						    			    		datos_user += "</refs>\n";
						    			    		
						    			    		usuario = "config/"+tb_user.getText()+"/ref.xml";
						    			    		
						    			    		a.escribirXML(usuario, datos_user);
						        					
						    			    		datos_user = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
						    			    		datos_user += "<!-- Configuracion de imagenes -->\n";
						    			    		datos_user += "<files>\n";
						    			    		datos_user += "</files>\n";
						    			    		
						    			    		usuario = "config/" + tb_user.getText() + "/img.xml";
						    			    		
						    			    		a.escribirXML(usuario, datos_user);
												}
												
											}
						        			
						        		});
			    			    		
			    			    		
			    			    		
			    			    		a.escribirXML(ruta,datos);
			    			    		
			    			    		Interfaz_portada portada = new Interfaz_portada();
			    			    		
			        				}
			        			}
			        		
			        			public void onFailure(Throwable caught) {
			        				Utiles.msj("Error", "El servidor no responde.");
			        			}
			        		});
			        		
			        		
			          }
			});
		
		acept.setPixelSize(70, 25);
		acept.setStyleName("letra_boton");
	
		/** estructura general **/
		
		base.setStyleName("panel_reg");
		base.add(cabecera, DockPanel.NORTH);
		base.add(pie, DockPanel.SOUTH);
		base.setHorizontalAlignment(DockPanel.ALIGN_CENTER);
		base.setPixelSize(600, 599);
		
		
		String tab = new String();
		for(int i=0;i<6;i++)
			tab += "&nbsp;";
		
		
		/** tabla central **/
		
		
		CellFormatter f_hor = tcentral.getCellFormatter();
		for(int i=0;i<4;i++)
			f_hor.setHorizontalAlignment(i, 0, HasHorizontalAlignment.ALIGN_RIGHT);
		
		
		tcentral.setCellSpacing(2);
		tcentral.setSize("400px", "200px");
		tcentral.setStyleName("panel_reg");
		
		tcentral.setWidget(1, 0, new HTML("<font size=2>Nombre de usuario:</font>" + tab));
		tcentral.setWidget(2, 0, new HTML("<font size=2>Contrase&ntilde;a:</font>" + tab));
		tcentral.setWidget(3, 0, new HTML("<font size=2>Confirme la contrase&ntilde;a:</font>" + tab));

		
		tcentral.setWidget(1, 1, tb_user);
		tcentral.setWidget(2, 1, tb_pass);
		tcentral.setWidget(3, 1, tb_pass2);
	
	
		tcentral.setWidget(4, 1, acept);
		
		
		/** tabla vertical que contiene la central **/
		
		FlexCellFormatter f_vert = vert.getFlexCellFormatter();
		f_vert.setVerticalAlignment(3, 0, HasVerticalAlignment.ALIGN_MIDDLE);
		f_vert.setHorizontalAlignment(3, 0, HasHorizontalAlignment.ALIGN_CENTER);
		f_vert.setHorizontalAlignment(4, 0, HasHorizontalAlignment.ALIGN_CENTER);
		f_vert.setVerticalAlignment(4, 0, HasVerticalAlignment.ALIGN_TOP);
		f_vert.setHorizontalAlignment(5, 0, HasHorizontalAlignment.ALIGN_CENTER);
		f_vert.setVerticalAlignment(5, 0, HasVerticalAlignment.ALIGN_TOP);
		
		vert.setSize("500px", "375px");
		vert.setCellSpacing(0);
		vert.setWidget(0, 0, new HTML("&nbsp;"));
		
		
		tsup.setHTML("<font size=5 color='#666666'>Inscr&iacute;base para una cuenta con Curiam online</font>");
		
		
		vert.setWidget(2, 0, new HTML("&nbsp;"));
		vert.setWidget(3, 0, tsup);
		vert.setWidget(4, 0, tcentral);
		vert.setWidget(5, 0, b_portada);
		
		base.add(vert, DockPanel.CENTER);
		
		
		/** enlazar con RootPanel **/
		
		RootPanel.get().clear();
		RootPanel.get().add(base);
		
	}
}
