package itourbaskServlet;

import javax.servlet.http.Cookie;

import q53_util.q53LogEstadisticas;
import q53_util.q53Logger;
import q53_util.q53Util;

import com.cidat.proclets.PSP;
import com.cidat.proclets.ProcletException;
import com.cidat.proclets.ProcletServiceData;


public class q53genLoginServlet extends q53Servlet {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	ProcletServiceData  psd;
	String dominio;
	public void pspProcess(ProcletServiceData sd) throws ProcletException {
		psd= sd;
    	q53_tratarCookies(sd);
    	//METER EN LOGGER
		    	
    	String app = sd.gOS("q53_cki.q53_destino");
    	
        // establece el contentType del response
        sd.res.setContentType("text/html");
        sd.res.setHeader("Pragma", "no-cache");
        sd.res.setHeader("Cache-Control", "no-cache");
        sd.res.setHeader("Expires", "0");
        q53LogEstadisticas.printLog("Valor de sd.getLogFilePath() -"+ sd.getLogFilePath());
        PSP.paramProclet(sd, "usuario(),clave(),es_usuario_padre(),oficina(), origen()");
         q53LogEstadisticas.printLog("es_usuario_padre:" + sd.gOS("es_usuario_padre"));
        
		//Parte correspondiente a haber elegido el tipo de usuario(administrador o coordinador) siendo coordinador
		dominio = q53Util.getDominio(sd.req.getRequestURL());
		q53LogEstadisticas.printLog("El coordinador a decidido entrar como "+ sd.gOS("eleccion_del_coordinador"));
		Cookie ck_mostrar_elegir= new Cookie("q53_mostrar_elegir","N");
		ck_mostrar_elegir.setDomain(dominio);
		ck_mostrar_elegir.setPath("");
		sd.res.addCookie(ck_mostrar_elegir);
		
		Cookie q53_mostrar_hijos= new Cookie("q53_mostrar_hijos","1");
		q53_mostrar_hijos.setDomain(dominio);
		q53_mostrar_hijos.setPath("");
		sd.res.addCookie(q53_mostrar_hijos);
		
		 // acceso a la base de datos
		//String query="SELECT T03_COUSU, T03_COOFI, T03_ARTUS, T03_ARTUSPW FROM PERSONA WHERE UPPER(T03_LOGIN)=UPPER('${usuario}') AND T03_PASS='${clave}'";       
		String query="SELECT T03_COUSU, T03_COOFI, T03_ARTUS, T03_ARTUSPW FROM PERSONA, OFICINA WHERE T02_COOR=T03_COOFI AND UPPER(T03_LOGIN)=UPPER('${usuario}') AND T03_PASS='${clave}' AND T02_FEBAJA IS NULL";       
		q53LogEstadisticas.printLog("Antes de la query : -" + query);
		q53LogEstadisticas.printLog("Valor de la query que coge los datos del usuario -"+ query);
		PSP.sqlProclet(sd,"rtdo[]="+query);
		q53LogEstadisticas.printLog("Después de la query : -" + query);    
		if (!sd.gOS("rtdo[0].t03_cousu").equals("")) {
			q53LogEstadisticas.printLog("Entramos al if por cousu distinto de blancos.");
			 // acceso a la base de datos para recuperar los perfiles del usuario
			q53LogEstadisticas.printLog("Acceso a la base de datos para recuperar los perfiles del usuario");            
			String cousu = sd.gOS("rtdo[0].t03_cousu");
			q53LogEstadisticas.printLog("Valor de la variable cousu-"+cousu);
			String artus = sd.gOS("rtdo[0].t03_artus");
			q53LogEstadisticas.printLog("Valor de la variable artus-"+ artus);
			String artuspw = sd.gOS("rtdo[0].t03_artuspw");
			q53LogEstadisticas.printLog("Valor de la variable artuspw-"+ artuspw);
			
			// comprobar si el usuario es coordinador
			query="SELECT COUNT(*) es_coordinador FROM PERPER WHERE T05_COUSU="+cousu+" AND t05_coper=1";       
			q53LogEstadisticas.printLog("query que comprueba si es un usuario coordinador-"+ query);
			PSP.sqlProclet(sd, "num[]="+query);
			//si es_padre="1" es que si lo es, si no, no lo es
			String es_coordinador = sd.gOS("num[0].es_coordinador");
			if(es_coordinador.equals("1")) es_coordinador="2";
			q53LogEstadisticas.printLog("Valor de la variable es_coordinador-"+ es_coordinador);
				// FIN comprobar si el usuario es coordinador
			
			
			// comprobar si el usuario es de una oficina padre
			query="SELECT COUNT(*) es_padre FROM PERSONA,PERPER WHERE T03_COUSU="+cousu+" AND t03_cousu=t05_cousu AND t05_coper=2 AND t03_coofi IN (SELECT DISTINCT t02_copadre FROM OFICINA WHERE t02_inesta = 'S' and  t02_copadre LIKE '%' AND T02_FEBAJA IS NULL)";       
			q53LogEstadisticas.printLog("query que comprueba si es un usuario padre-"+ query);
			PSP.sqlProclet(sd,"num[]="+query);
			//si es_padre="1" es que si lo es, si no, no lo es
			String es_padre = sd.gOS("num[0].es_padre");
			q53LogEstadisticas.printLog("Valor de la variable es_padre-"+ es_padre);
				// FIN comprobar si el usuario es de una oficina padre
			
			query = "SELECT T05_COPER, T05_COUSU FROM PERPER WHERE T05_COUSU=${rtdo[0].t03_cousu}";
			q53LogEstadisticas.printSql("Antes de la query: -" + query);
			PSP.sqlProclet(sd, "rtdo_perfiles[]=SELECT T05_COPER, T05_COUSU FROM PERPER WHERE T05_COUSU=${rtdo[0].t03_cousu}");
			q53LogEstadisticas.printSql("Después de la query: -" + query);
			
			// set de las cookie
			q53LogEstadisticas.printLog("Set de las cookie");            
			q53LogEstadisticas.printLog("Valor del dominio-"+ dominio);          
			
			Cookie ck_usuario = new Cookie("q53_usuario",sd.gOS("rtdo[0].t03_cousu"));
			//q53LogEstadisticas.printLog("Usuario-"+ sd.gOS("rtdo[0].t03_cousu"));
			q53LogEstadisticas.printLog("cookie ck_usuario-"+ sd.gOS("rtdo[0].t03_cousu"));
			ck_usuario.setDomain(dominio);
			ck_usuario.setPath("");
			
			// Creo la cookie que almacena el nombre introducido
			Cookie ck_nombre_usuario = new Cookie("q53_nombre_usuario",sd.gOS("usuario"));
			q53LogEstadisticas.printLog("cookie ck_nombre_usuario-"+ sd.gOS("usuario"));
			ck_nombre_usuario.setDomain(dominio);
			ck_nombre_usuario.setPath("");
			
			// Creo la cookie que almacena el password introducido
			Cookie ck_password = new Cookie("q53_password",sd.gOS("clave"));
			ck_password.setDomain(dominio);
			ck_password.setPath("");
			
			
			// creo la cookie que almacena si el usuario es de oficina padre(1) o coordinador(2) y que se utilizara a lo largo de la aplicacion
			Cookie ck_es_padre;
			if(es_coordinador.equals("2")){
				ck_es_padre = new Cookie("q53_es_padre","1");
				q53LogEstadisticas.printLog("cookie ck_es_padre-"+ es_coordinador);
			}else{
				ck_es_padre = new Cookie("q53_es_padre",es_padre);
				q53LogEstadisticas.printLog("cookie ck_es_padre-"+ es_padre);
			}
			ck_es_padre.setDomain(dominio);
			ck_es_padre.setPath("");
			
			
			Cookie ck_artus = new Cookie("q53_artus",sd.gOS("rtdo[0].t03_artus"));
			q53LogEstadisticas.printLog("cookie ck_artus-"+ sd.gOS("rtdo[0].t03_artus"));
			ck_artus.setDomain(dominio);
			ck_artus.setPath("");
			
			Cookie ck_artuspw = new Cookie("q53_artuspw",sd.gOS("rtdo[0].t03_artuspw"));
			q53LogEstadisticas.printLog("cookie ck_artuspw-"+ sd.gOS("rtdo[0].t03_artuspw"));
			ck_artuspw.setDomain(dominio);
			ck_artuspw.setPath("");
			
			String oficina=sd.gOS("rtdo[0].t03_coofi");
			/*Cookie ck_oficina = new Cookie("q53_oficina",  sd.gOS("rtdo[0].t03_coofi"));
			q53LogEstadisticas.printLog("cookie ck_oficina-" + sd.gOS("rtdo[0].t03_coofi"));                    
			ck_oficina.setDomain(dominio);
			ck_oficina.setPath("");*/

			// los perfiles se guardan en q53_perfil, separados por "#"
			int tmp_perfiles_length = sd.gI("rtdo_perfiles.length");
			String tmp_perfiles = "";

			for (int i = 0; i < tmp_perfiles_length; i++) {
				// si no es el primero, concatenar "#"
				if (i != 0) {
					tmp_perfiles += "#";
				}

				tmp_perfiles += sd.gOS("rtdo_perfiles[" + i + "].t05_coper");
			}

			Cookie ck_perfil = new Cookie("q53_perfil", tmp_perfiles);
			q53LogEstadisticas.printLog("cookie ck_perfil-"+tmp_perfiles);
			ck_perfil.setDomain(dominio);
			ck_perfil.setPath("");
				
				
			sd.res.addCookie(ck_usuario);
			//sd.res.addCookie(ck_oficina);
			sd.res.addCookie(ck_password);
			sd.res.addCookie(ck_nombre_usuario);
			sd.res.addCookie(ck_perfil);
			sd.res.addCookie(ck_artus);
			sd.res.addCookie(ck_artuspw);
			sd.res.addCookie(ck_es_padre);
			
			if (es_coordinador.equals("2")){
				obtenerOficinasParaCoordinador();
			} else {
				obtenerOficina();
	        if(es_padre.equals("1")){
				sd.setVal("pagina", "q53_gen_login");
				query="Select t02_coor,t02_noofi from oficina where (t02_copadre='"+oficina+"' OR t02_coor='"+oficina+"') and  t02_inesta = 'S' AND T02_FEBAJA IS NULL order by t02_noofi";   
				q53LogEstadisticas.printLog("Valor de le query para obtener las oficinas hijo y padre-"+ query);
	        	  	        	   
				PSP.sqlProclet(sd,"ofis[]="+query);
				String oficinas=sd.gOS("ofis[0].t02_coor")+"#"+sd.gOS("ofis[0].t02_noofi");
				for(int i=1;i<sd.gI("ofis.length");i++){
					oficinas+="*"+sd.gOS("ofis["+i+"].t02_coor")+"#"+sd.gOS("ofis["+i+"].t02_noofi");
				}
				///Cookie ck_oficinas = new Cookie("q53_oficinas_hijo",oficinas);
				//q53LogEstadisticas.printLog("cookie ck_oficinas-"+ oficinas);  
				//ck_oficinas.setDomain(dominio);
				//ck_oficinas.setPath("");
				//sd.res.addCookie(ck_oficinas);
	            setCookie("q53_oficinas_hijo",oficinas);
	            
				query="Select t02_noofi from oficina where t02_inesta = 'S'  and t02_coor='"+oficina+"' AND T02_FEBAJA IS NULL";     
				q53LogEstadisticas.printLog("ofipadre-"+ query);  
				PSP.sqlProclet(sd,"ofipadre[]="+query);
	               
				Cookie ck_oficina_padre= new Cookie("q53_oficina_padre",sd.gOS("ofipadre[0].t02_noofi"));
				q53LogEstadisticas.printLog("cookie ck_oficina_padre-"+ sd.gOS("ofipadre[0].t02_noofi"));  
				ck_oficina_padre.setDomain(dominio);
				ck_oficina_padre.setPath("");
				sd.res.addCookie(ck_oficina_padre);
					
				//q53_redirigir(sd,"/q53ItourbaskWar/q53_gen_login.jsp");          
	        }else{
	        	q53Logger.setUsuario(sd.gOS("q53_cki.q53_usuario"));
	       		q53Logger.setOficina(sd.gOS("q53_cki.q53_oficina"));
			}	
		
			if(sd.gOS("es_usuario_padre").equals("si")){
        		q53LogEstadisticas.printLog("Si es usuario padre");
        		
	        	/*ck_oficina = new Cookie("q53_oficina",sd.gOS("oficina"));
	            ck_oficina.setDomain(dominio);
	            ck_oficina.setPath("");
	            sd.res.addCookie(ck_oficina);*/
	                   
	            q53Logger.setUsuario(sd.gOS("q53_cki.q53_usuario"));
	        	q53Logger.setOficina(sd.gOS("q53_cki.q53_oficina"));
			}	
			}
			q53LogEstadisticas.printLog("Antes de redirigir a "+q53Util.rutaEntrada(app));      
			q53_redirigir(sd, q53Util.rutaEntrada(app));
			q53LogEstadisticas.printLog("Después de redirigir a "+q53Util.rutaEntrada(app));
			
		}else {
				q53LogEstadisticas.printLog("Entramos al if por cousu igual a blancos.");        	
			    sd.setVal("pagina", "q53_gen_login");
			    q53LogEstadisticas.printLog("Antes de redirigir a /q53ItourbaskWar/q53_gen_login.jsp?es_usuario_error");      
			    q53_redirigir(sd,
			         "/q53ItourbaskWar/q53_gen_login.jsp?es_usuario_error");
			    q53LogEstadisticas.printLog("Después de redirigir a /q53ItourbaskWar/q53_gen_login.jsp?es_usuario_error");
	}
   
}
	private void obtenerOficinasParaCoordinador() throws ProcletException{
		q53LogEstadisticas.printLog("Es usuario coordinador");
		// no se que es esto....
		//sd.setVal("pagina", "q53_gen_login");
		String query="Select t02_coor,t02_noofi from oficina WHERE t02_inesta = 'S'  AND T02_FEBAJA IS NULL order by t02_noofi"; 
		q53LogEstadisticas.printLog("Valor de le query para obtener las oficinas hijo y padre-"+ query);
		PSP.sqlProclet(psd,"ofis[]="+query);
		String oficinas=psd.gOS("ofis[0].t02_coor")+"#"+psd.gOS("ofis[0].t02_noofi");
		for(int i=1;i<psd.gI("ofis.length");i++){
			oficinas+="*"+psd.gOS("ofis["+i+"].t02_coor")+"#"+psd.gOS("ofis["+i+"].t02_noofi");
		}
		setCookie("q53_oficinas_hijo", oficinas); 
		obtenerOficina();
		//setCookie("q53_oficina",  psd.gOS("rtdo[0].t03_coofi"));
		//psd.sS("q53_oficina",psd.gOS("rtdo[0].t03_coofi"));
		
	}
	
	private void setCookie(String name, String value){
		setCookie(name, value, dominio, "/");
	}
	
	private void setCookie(String name, String value, String domain, String path){
		Cookie cookie = new Cookie(name,value);
		q53LogEstadisticas.printLog("cookie " + name + " = "+ value + " en dominio " + dominio);  
		cookie.setDomain(domain);
		cookie.setPath(path);
		psd.res.addCookie(cookie);
		//cookie.setMaxAge(0);
	}
	
	private void obtenerOficina(){
		if (psd.gOS("origen").equals("login")){
			q53LogEstadisticas.printLog("login " + psd.gOS("rtdo[0].t03_coofi")); 
			setCookie("q53_oficina", psd.gOS("rtdo[0].t03_coofi"));
			//psd.req.getSession(true).setAttribute("q53_cki.q53_oficina_act", psd.gOS("rtdo[0].t03_coofi"));
		}else if (psd.gOS("origen").equals("cambiooficina")){
			q53LogEstadisticas.printLog("cambiooficina " + psd.gOS("oficina")); 
			setCookie("q53_oficina", psd.gOS("oficina"));
			//psd.req.getSession(true).setAttribute("q53_cki.q53_oficina_act", psd.gOS("oficina"));
		}
	}
}
