package businessLogic;

import java.net.URL;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import model.User;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

public class LoginManager 
{
	public static String serverPath;
	
	
	/*
	 * Méthode permettant de savoir si un utilisateur s'est déjà identifié. On regarde d'abord dans le scope de session, sinon dans le Cookie. Si le cookie existe, on ajoute l'utilisateur dans le scope de Session.
	 */
	public static boolean isAuthentified(HttpServletRequest request)
	{
		User u = (User)request.getSession().getAttribute("user");
		if(u == null)
		{
			if(CookieManager.isUserLogged(request))
			{
				u = new User();
				u.setKey(CookieManager.getKey(request));
				request.getSession().setAttribute("user", u);
			}
			else return false;
		}
		return true;
	}
	
	/**
	 * Méthode essayant de récupérer l'URL du Serveur sur lequel le .war est déployé.
	 * Pour cela il cherche dans les paramètres du Header un paramètre dont le nom contient "host"
	 * S'il ne le trouve pas il tente de récupérer son adresse physique avec wtp.deploy (fonctionne sur Eclipse seulement)
	 * 
	 * @param request
	 */
	public static void setServerURL(HttpServletRequest request)
	{
		String url = null;
		Enumeration<?> e = request.getHeaderNames();
		while(e.hasMoreElements())
		{
			String header = (String)e.nextElement();
			if(header.contains("host")) url = request.getHeader(header);
		}
		if(url == null) serverPath = System.getProperty("wtp.deploy")+"/"+request.getContextPath(); // Récupérer l'adresse physique du serveur
		else serverPath = "http://"+url+request.getContextPath(); // Récupérer l'url du serveur 
	}
	
	
	/**
	 * 
	 * Méthode vérifiant si le login password existe dans la BDD
	 * 
	 * @param login
	 * @param pass
	 * @return
	 */
	public static boolean verifyLoginPass(String login, String pass)
	{
		Document document;
		Element racine;
		// On crée une instance de SAXBuilder
	    SAXBuilder sxb = new SAXBuilder();
	    try
	    {
	    	// On crée un nouveau document JDOM avec en argument le fichier XML
	    	document = sxb.build(new URL(serverPath+"/users.xml"));// Je dois renseigner l'URL du fichier sur le serveur (utilisation du File)
		    // On initialise un nouvel élément racine avec l'élément racine du document.
		    racine = document.getRootElement();
		    //On crée une List contenant tous les noeuds "user" de l'Element racine
		    List<?> listUsers = racine.getChildren("user");
		    //On crée un Iterator sur notre liste
		    Iterator<?> i = listUsers.iterator();
		    while(i.hasNext())
		    {
		        Element courant = (Element)i.next();
		        //On compare le login et le password de l'élément courant
		        if(login.equals(courant.getAttributeValue("login")) && pass.equals(courant.getAttributeValue("password"))) return true;
		    }
	    }
	    catch(Exception e)
	    {
	    	e.printStackTrace();
	    }
	    return false;
	}
}
