package controler.gestion;

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

import language.Language;
import view.vueGestionEmploye.VueGestionAjouterUtilisateur;
import view.vueGestionEmploye.VueGestionModifierUtilisateur;

import commander.Commander;

import controler.Message;
import database.crud.EmployeCrud;
import database.crud.GroupeUtilisateurCrud;
import database.crud.UtilisateurCrud;
import database.dataset.Employe;
import database.dataset.Groupe_utilisateur;
import database.dataset.Utilisateur;

public class ControlerGestionAjouterUtilisateur {

	public static final Message reveil = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterUtilisateur))
				return;
			VueGestionAjouterUtilisateur vue = (VueGestionAjouterUtilisateur)caster;
			Connection connection = Commander.getInstance().getConnectionBD();
			
			GroupeUtilisateurCrud groupeUtilisateurCrud = new GroupeUtilisateurCrud(connection);
			List<Groupe_utilisateur> groupeUtilisateur = groupeUtilisateurCrud.readAll(); 
			
			String temporaire = vue.getSelectedGroupeUtilisateur();
			
			vue.clearGroupeUtilisateur();
			
			for(int i=0;i<groupeUtilisateur.size();i++)
			{
				vue.AddElementGroupeUtilisateur(groupeUtilisateur.get(i).getGroupe_utilisateur_nom());
			}
			
			if(temporaire != "")
			{
				vue.setSelectedGroupeUtilisateur(temporaire);
			}

		}
	};

	public static final Message ajouter = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterUtilisateur))
				return;
			
			VueGestionAjouterUtilisateur vue = (VueGestionAjouterUtilisateur)caster;
			Connection connection = Commander.getInstance().getConnectionBD();
			
			if(vue.isInputDataValid() == false)
				return;
			
			String prenom = vue.getTextFieldPrenom();
		    String nom = vue.getTextFieldNom();
		    String commentaire = vue.getTextAreaCommentaire();
			
			GroupeUtilisateurCrud groupeUtilisateurCrud = new GroupeUtilisateurCrud(connection);
			List<Groupe_utilisateur> groupeUtilisateur = groupeUtilisateurCrud.readAll();
			String[] groupeUtilisateurItem = new String[groupeUtilisateur.size()];
			
			for(int i=0;i<groupeUtilisateur.size();i++)
			{
				groupeUtilisateurItem[i] = groupeUtilisateur.get(i).getGroupe_utilisateur_nom();
			}
			
			/*ajout utilisateur*/
			int idSelectedGroupeUtil = -1;
			
			List<Groupe_utilisateur> groupeUtil = groupeUtilisateurCrud.readAllLike(vue.getSelectedGroupeUtilisateur());
			for(int i = 0; i < groupeUtil.size(); i++)
			{
				if(groupeUtil.get(i).getGroupe_utilisateur_nom().equals(vue.getSelectedGroupeUtilisateur()))
				{
					idSelectedGroupeUtil = groupeUtil.get(i).getgroupe_utilisateur_p_id();
					break;
				}
			}
			
			UtilisateurCrud utilisateurCrud = new UtilisateurCrud(connection);
			
			connection.setAutoCommit(false);
			Utilisateur util = new Utilisateur(utilisateurCrud.getNewSequenceId(), vue.getTextfieldNomUtilisateur(), "", vue.getChkBoxActif(), idSelectedGroupeUtil);
			int idUtilisateur = utilisateurCrud.create(util);
			connection.commit();
			connection.setAutoCommit(true);
			/* *** */
			
			/*ajout employe*/
			EmployeCrud employeCrud = new EmployeCrud(connection);
			//List<Utilisateur> utilisateur = utilisateurCrud.readAllLike(utilisateur_ratache, "", "", "", "");
	
			Employe employe = new Employe(employeCrud.getNewSequenceId(), prenom, nom, commentaire, util.getutilisateur_p_id());
			
			employeCrud.create(employe);
			/* *** */
			
			Language lang = Commander.getInstance().getLanguage();
			
			Utilisateur newUtilisateur = utilisateurCrud.readById(idUtilisateur);
			
			VueGestionModifierUtilisateur vueDest = (VueGestionModifierUtilisateur) Commander.getInstance().getVuePrincipale().setSelectedTab(lang.getPrincipaleGestion(), lang.getGestionModifierUtilisateur());
			vueDest.setUtilisateurId(idUtilisateur);
			vueDest.setEmployeId(employe.getemploye_p_id());
			vueDest.AddDataToFields(newUtilisateur.getUtilisateur_nom(), nom, prenom, commentaire, groupeUtilisateurItem,groupeUtilisateurCrud.readById(idSelectedGroupeUtil).getGroupe_utilisateur_nom(), vue.getChkBoxActif());
			vueDest.AbleModification();
		}
	};	

	public static final Message annuler = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterUtilisateur))
				return;
			VueGestionAjouterUtilisateur vue = (VueGestionAjouterUtilisateur)caster;
			vue.ClearInfo();
			reveil.trigger(caster);

		}
	};
}
