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 ControlerGestionModifierUtilisateur {

	public static final Message reveil = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterUtilisateur))
				return;
			VueGestionModifierUtilisateur vue = (VueGestionModifierUtilisateur)caster;
			Connection connection = Commander.getInstance().getConnectionBD();
			
			if(vue.getUtilisateurId() == 0)
			{
				vue.setEnabled(false);
			}
			else
			{
				vue.setEnabled(true);
			}
		}
	};

	public static final Message modifier = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionAjouterUtilisateur))
				return;
			VueGestionModifierUtilisateur vue = (VueGestionModifierUtilisateur)caster;
			
			if(!vue.isInputDataValid())
				return;

			Connection connection = Commander.getInstance().getConnectionBD();
			Language lang = Commander.getInstance().getLanguage();
			
			String nom = vue.getTextFieldNom();
		    String prenom = vue.getTextFieldPrenom();
		    String commentaire = vue.getTextAreaCommentaire();
		    
		    GroupeUtilisateurCrud groupeUtilisateurCrud = new GroupeUtilisateurCrud(connection);
			List<Groupe_utilisateur> groupeUtilisateur = groupeUtilisateurCrud.readAll();
			String[] groupeUtilisateurItem = new String[groupeUtilisateur.size()];
			int selectItem = -1;
			
			for(int i=0;i<groupeUtilisateur.size();i++)
			{
				groupeUtilisateurItem[i] = groupeUtilisateur.get(i).getGroupe_utilisateur_nom();
				if(groupeUtilisateur.get(i).getGroupe_utilisateur_nom().equals(vue.getSelectedGroupeUtilisateur()))
					selectItem = groupeUtilisateur.get(i).getgroupe_utilisateur_p_id();
			}
			
			EmployeCrud employeCrud = new EmployeCrud(connection);
			UtilisateurCrud utilisateurCrud = new UtilisateurCrud(connection);
			Utilisateur utilisateur = new Utilisateur(vue.getUtilisateurId(), vue.getTextfieldNomUtilisateur(), utilisateurCrud.readById(vue.getUtilisateurId()).getUtilisateur_motdepasse(), vue.getChkBoxActif(), selectItem);
			Employe employe = new Employe(vue.getEmployeId(), prenom, nom, commentaire, utilisateur.getutilisateur_p_id());
			employeCrud.update(employe);
			utilisateurCrud.update(utilisateur);
			
			employe = employeCrud.readById(vue.getEmployeId());
			
			//utilisateur = utilisateurCrud.readAll()
			Utilisateur utilisateurSelectionne = utilisateurCrud.readById(employe.getUtilisateur_fk_id());
			
			vue.AddDataToFields(utilisateurSelectionne.getUtilisateur_nom(), employe.getEmploye_nom(), employe.getEmploye_prenom(), employe.getEmploye_commentaire(), groupeUtilisateurItem, groupeUtilisateurCrud.readById(utilisateurSelectionne.getGroupe_utilisateur_fk_id()).getGroupe_utilisateur_nom(), utilisateurSelectionne.getUtilisateur_actif());
		
			Commander.getInstance().getVuePrincipale().setModifiedTab(lang.getPrincipaleGestion(), lang.getGestionModifierUtilisateur(),false);
		}
	};	

	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();
			
			vue.setEnabled(false);
			
			Language lang = Commander.getInstance().getLanguage();
			Commander.getInstance().getVuePrincipale().setModifiedTab(lang.getPrincipaleGestion(), lang.getGestionModifierUtilisateur(),false);
		}
	};
	
	public static final Message dataChanged = new Message(){
		public void trigger(Object caster) throws Exception {
			if (!(caster instanceof VueGestionModifierUtilisateur))
				return;
			
			Language lang = Commander.getInstance().getLanguage();
			Commander.getInstance().getVuePrincipale().setModifiedTab(lang.getPrincipaleGestion(), lang.getGestionModifierUtilisateur(),true);
		}
	};
}
