package controler.connection;

import java.sql.Connection;
import java.util.List;
import java.util.Map;

import view.FactoryPrincipale.PrincipaleGestionFactory;
import view.FactoryPrincipale.PrincipaleReceptionFactory;
import view.FactoryPrincipale.PrincipaleSpectateurFactory;
import view.vueConnectionPanel.VueConnection;

import commander.Commander;

import controler.Message;
import database.migration.SqlFactory;

public class ControleurConnection {

	public static final Message attemptLogin = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueConnection))
				return;
			VueConnection vue = (VueConnection)caster;
			Connection connection = Commander.getInstance().getConnectionBD();
			
			String user = vue.getUser();
			
			try {
				//ViewUtilisateurCrud viewUtilisateurCrud = new ViewUtilisateurCrud();
				
				//String userGroup = viewUtilisateurCrud.readAllLike(user, String.valueOf(vue.getPassword()));
				System.out.println(vue.getPassword());
				List<Map<String,Object>>result = SqlFactory.query(connection, "SELECT employe_p_id, groupe_utilisateur_nom FROM view_utilisateur WHERE utilisateur_nom = '"+user+"' AND utilisateur_motdepasse = '"+String.valueOf(vue.getPassword())+"'");
				System.out.println("SELECT employe_p_id, groupe_utilisateur_nom FROM view_utilisateur WHERE utilisateur_nom = '"+user+"' AND utilisateur_motdepasse = '"+String.valueOf(vue.getPassword())+"' AND utilisateur_actif = 'V'");
				if(result.isEmpty())
				{
					user = "";
					vue.alertConnectionFailed();
				}
				else
				{
					Commander.getInstance().setSessionProperty("employe_p_id",result.get(0).get("employe_p_id").toString());
					String userGroup = result.get(0).get("groupe_utilisateur_nom").toString();
					
					switch(userGroup)
					{
						case "ADMINISTRATEUR":
							Commander.getInstance().setLanguage(vue.getLang());
							Commander.getInstance().initFenetre();
							Commander.getInstance().setFactory(new PrincipaleGestionFactory());
							break;
						case "RECEPTION":
							Commander.getInstance().setLanguage(vue.getLang());
							Commander.getInstance().initFenetre();
							Commander.getInstance().setFactory(new PrincipaleReceptionFactory());
							break;
						case "SPECTATEUR":
							Commander.getInstance().setLanguage(vue.getLang());
							Commander.getInstance().initFenetre();
							Commander.getInstance().setFactory(new PrincipaleSpectateurFactory());
							break;
					}
					Commander.getInstance().getFenetre().setEnteteVisible(true);
					Commander.getInstance().getVuePrincipale().setSelectedTab("Plan", "Plan");
				}
			} catch (Exception e) {
				e.printStackTrace();
				user = "";
				vue.alertConnectionFailed();
			}
		}
	};

}
