import java.util.Scanner;
import java.util.Vector;

import Modèle.Contrainte;
import Modèle.DonneesXML;
import Modèle.FonctionObjectif;
import Modèle.Groupe;
import Modèle.Probleme;
import Modèle.Utilisateur;
import Vue.log;

public class OptimEistiIHM {
	protected Vector<Probleme> pb;
	protected Vector<Groupe> groupes;
	protected boolean connect;
	protected Utilisateur utilCourant;
	protected DonneesXML DXML;

	public static void main(String[] args) {
		new OptimEistiIHM();
	}

	public OptimEistiIHM() {
		connect = false;
		utilCourant=null;
		while (!connect) {
			DXML = new DonneesXML();
			groupes = DXML.getGroupes();
			pb = DXML.getPb(DXML.getArbrePb());
			// DXML.afficherXMLUtilisateur();
			// DXML.afficherXMLProblemes();
			new log(connect,groupes,utilCourant);
			
			Scanner sc = new Scanner(System.in);
			
			while (connect) {
				System.out.println("Menu : ");
				System.out.println("/!\\ manque : cas 5 et 7 (résolution + exportation)");
				System.out.println("+ pb accent");
				System.out.println("0. Se déconnecter");
				System.out.println("1. Créer un problème");
				System.out.println("2. Voir  les problèmes");
				System.out.println("3. Modifier un problème");
				System.out.println("4. Supprimer un problème");
				System.out.println("5. Résoudre un problème");
				System.out.println("6. Importer un problème à partir d'un fichier XML");
				System.out.println("7. Exporter un problème");
				if (utilCourant.getAdministrateur()) {
					System.out.println("8. Voir la liste des groupes et des utilisateurs");
					System.out.println("9. Ajouter un utilisateur");
					System.out.println("10. Supprimer un utilisateur");
					System.out.println("11. Modifier ou déplacer un utilisateur");
					System.out.println("12. Ajouter un groupe");
					System.out.println("13. Supprimer un groupe");
					System.out.println("14. Modifier les droits d'un groupe");
				}
				int rep = -1;
				try {
					rep = Integer.parseInt(sc.nextLine());
					if (utilCourant.getAdministrateur())
						while (rep < 0 || rep > 14) {
							System.out.println("Mauvaise entrée. Nouveau choix ?");
							rep = Integer.parseInt(sc.nextLine());
						}
					else
						while (rep < 0 || rep > 7) {
							System.out.println("Mauvaise entrée. Nouveau choix ?");
							rep = Integer.parseInt(sc.nextLine());
						}
					menu(rep);
				} catch (Exception e) {
					System.out.println("Mauvaise entrée. Vous devez rentrer un entier");
				}
			}
			break;
		}
	}

	public void menu(int choix) {
		Scanner sc = new Scanner(System.in);
		switch (choix) {
			case 0: // Se déconnecter
				System.out.println("Sauvegarder les modifications ? o/n");
				String rep2 = sc.nextLine();
				while (!rep2.equals("o") && !rep2.equals("n")) {
					System.out.println("Réponse invalide. Répondez par o ou n.");
					rep2 = sc.nextLine();
				}
				if (rep2.equals("o")) {
					DXML.sauvegarderModifPb(pb);
					DXML.sauvegarderModifUtil(groupes);
				}
				connect = false;
				utilCourant = null;
				System.out.println("Vous êtes déconnecté.");
				System.out.println();
			break;
			case 1: // Créer un problème
				if (!getGroupeUtilisateur(utilCourant.getLogin()).getDroits().contains("modifier")&&!utilCourant.getAdministrateur())
					System.out.println("Vous n'avez pas les droits pour créer un problème.");
				else
					ajoutPb();
				System.out.println();
			break;
			case 2: // Voir les problèmes
				afficherProblemes();
			break;
			case 3: // Modifier un problème
				if (!getGroupeUtilisateur(utilCourant.getLogin()).getDroits().contains("modifier")&&!utilCourant.getAdministrateur())
					System.out.println("Vous n'avez pas les droits pour modifier un problème.");
				else {
					System.out.println("Quel est le nom du problème que vous souhaitez modifier ?");
					String nPb = sc.nextLine();
					Probleme modifP = getPb(nPb);
					if (modifP != null) {
						System.out.println("Que souhaitez-vous modifier ?");
						System.out.println("1. La fonction objectif");
						System.out.println("2. Maximiser ou minimiser");
						System.out.println("3. Les contraintes");
						System.out.println("4. Le nom du problème");
						String rep4 = sc.nextLine();
						while (!rep4.equals("1") && !rep4.equals("2") && !rep4.equals("3") && !rep4.equals("4")) {
							System.out.println("Réponse invalide. Répondez par 1, 2, 3 ou 4");
							rep4 = sc.nextLine();
						}
						int rep5 = Integer.parseInt(rep4);
						switch (rep5) {
							case 1:
								System.out.println("Nouvelle fonction objectif ?");
								String f = sc.nextLine();
								modifP.setFctObj(new FonctionObjectif(modifP.getFctObj().getObjectif(), f));
							break;
							case 2:
								System.out.println("Voulez-vous maximiser ou minimiser le problème ?");
								String rep6 = sc.nextLine();
								while (!rep6.equals("maximiser") && !rep6.equals("minimiser")) {
									System.out.println("Réponse invalide. Répondez par maximiser ou minimiser");
									rep6 = sc.nextLine();
								}
								modifP.setFctObj(new FonctionObjectif(rep6, modifP.getFctObj().getFonction()));
							break;
							case 3:
								modifP.afficher();
								System.out.println("1. Supprimer une contrainte ?");
								System.out.println("2. Ajouter une contrainte ?");
								System.out.println("3. Modifier une contrainte ?");
								String rep7 = sc.nextLine();
								while (!rep7.equals("1") && !rep7.equals("2") && !rep7.equals("3")) {
									System.out.println("Réponse invalide. Répondez par 1, 2 ou 3");
									rep7 = sc.nextLine();
								}
								int rep8 = Integer.parseInt(rep7);
								switch (rep8) {
									case 1: // Supprimer une contrainte
										for (int i = 0; i < modifP.getContraintes().size(); i++) {
											System.out.println((i + 1) + ". " + modifP.getContraintes().get(i));
										}
										String rep9 = sc.nextLine();
										boolean valid = false;
										while (!valid) {
											try {
												int rep10 = Integer.parseInt(rep9);
												if (rep10 <= 0 || rep10 > modifP.getContraintes().size()) {
													System.out.println("Vous devez donner un chiffre entre 1 et " + modifP.getContraintes().size());
													rep9 = sc.nextLine();
												}
												else {
													valid = true;
													modifP.getContraintes().remove(rep10 - 1);
												}
											} catch (Exception e) {
												System.out.println("Répondez pas un entier.");
												rep9 = sc.nextLine();
											}
										}
									break;
									case 2: // Ajouter une contrainte
										boolean nouvContr = true;
										String c = "";
										String rep3 = "";
										while (nouvContr) {
											System.out.println("Quelle est la contrainte ?");
											c = sc.nextLine();
											modifP.ajoutContr(new Contrainte(c));
											System.out.println("Ajouter une autre contrainte ? o/n");
											rep3 = sc.nextLine();
											while (!rep3.equals("o") && !rep3.equals("n")) {
												System.out.println("Réponse invalide. Répondez par o ou n.");
												rep3 = sc.nextLine();
											}
											if (rep3.equals("n"))
												nouvContr = false;
										}
									break;
									case 3: // Modifier une contrainte
										for (int i = 0; i < modifP.getContraintes().size(); i++) {
											System.out.println((i + 1) + ". " + modifP.getContraintes().get(i));
										}
										String rep11 = sc.nextLine();
										boolean valid2 = false;
										while (!valid2) {
											try {
												int rep12 = Integer.parseInt(rep11);
												if (rep12 <= 0 || rep12 > modifP.getContraintes().size()) {
													System.out.println("Vous devez donner un chiffre entre 1 et " + modifP.getContraintes().size());
													rep11 = sc.nextLine();
												}
												else {
													valid2 = true;
													System.out.println("Tapez la nouvelle contrainte remplaçant celle désignée.");
													String rep13 = sc.nextLine();
													modifP.getContraintes().get(rep12 - 1).setContrainte(rep13);
												}
											} catch (Exception e) {
												System.out.println("Répondez pas un entier.");
												rep11 = sc.nextLine();
											}
										}
									break;
								}
							break;
							case 4:
								System.out.println("Quel est le nouveau nom ?");
								String newNom = sc.nextLine();
								while (!verifNomPbLibre(newNom)) {
									System.out.println("Ce nom de problème est déjà utilisé. Tapez en un autre");
									newNom = sc.nextLine();
								}
								modifP.setNom(newNom);
							break;
						}
						System.out.println("Problème modifié");
					}
					else {
						System.out.println("Il n'y a aucun problème de ce nom");
					}
				}
				System.out.println();
			break;
			case 4: // Supprimer un problème
				if (!getGroupeUtilisateur(utilCourant.getLogin()).getDroits().contains("supprimer")&&!utilCourant.getAdministrateur())
					System.out.println("Vous n'avez pas les droits pour supprimer un problème.");
				else {
					System.out.println("Quel est le nom du problème ?");
					afficherProblemes();
					String nomPb = sc.nextLine();
					Probleme p = getPb(nomPb);
					if (p == null)
						System.out.println("Ce nom de problème n'existe pas.");
					else {
						pb.remove(p);
						System.out.println("Problème supprimé");
					}
				}
				System.out.println();
			break;
			case 5: // Résoudre un problème
				if(!getGroupeUtilisateur(utilCourant.getLogin()).getDroits().contains("soudre")&&!utilCourant.getAdministrateur())
					System.out.println("Vous n'avez pas les droits pour résoudre un problème.");
				else{
				System.out.println("Quel problème voulez-vous résoudre ?");
				afficherProblemes();
				String nomPb3 = sc.nextLine();
				Probleme p3 = getPb(nomPb3);
				if (p3 == null)
					System.out.println("Ce nom de problème n'existe pas");
				else
					p3.resoudre();
				}
				System.out.println();
			break;
			case 6: // Importer un problème à partir d'un fichier XML
				if(!getGroupeUtilisateur(utilCourant.getLogin()).getDroits().contains("modifier")&&!utilCourant.getAdministrateur())
					System.out.println("Vous n'avez pas les droits pour importer un problème.");
				else{
				System.out.println("Quel est le chemin du fichier XML que vous souhaitez importer ?");
				String chemin = sc.nextLine();
				Vector<Probleme> vPb = DXML.importerPb(chemin);
				if (vPb != null) {
					for (int i = 0; i < vPb.size(); i++) {
						if (!verifNomPbLibre(vPb.get(i).getNom())) {
							System.out.println("Le nom de problème " + vPb.get(i).getNom() + " est déjà utilisé. Comment voulez-vous renommé ce problème ?");
							String renom = sc.nextLine();
							while (!verifNomPbLibre(renom)) {
								System.out.println("Ce nom de problème est déjà utilisé. Tapez en un autre");
								renom = sc.nextLine();
							}
							vPb.get(i).setNom(renom);
						}
						pb.add(vPb.get(i));
					}
					System.out.println("Les problèmes ont été ajoutés");
				}
				else
					System.out.println("Erreur importation du problème");
				}
				System.out.println();
			break;
			case 7: // Exporter un problème
				System.out.println("Quel problème voulez-vous exporter ?");
				afficherProblemes();
				String nomPb2 = sc.nextLine();
				Probleme p2 = getPb(nomPb2);
				if (p2 == null)
					System.out.println("Ce nom de problème n'existe pas.");
				else {
					System.out.println("Exportation sous quel format ? Excel ou Scilab");
					String format = sc.nextLine();
					while (!format.equals("Scilab") && !format.equals("Excel") && !format.equals("scilab") && !format.equals("excel")) {
						System.out.println("Réponse incorrect. Répondez par excel ou scilab");
						format = sc.nextLine();
					}
					exporter(p2, format);
				}
				System.out.println();
			break;
			case 8: // Voir la liste des utilisateurs
				afficherUtilisateurs();
			break;
			case 9: // Ajouter un utilisateur
				System.out.println("Quel est le login de cet utilisateur ?");
				String login = sc.nextLine();
				while (!verifLoginLibre(login)) {
					System.out.println("Ce login est déjà utilisé. Choisissez-en un autre");
					login = sc.nextLine();
				}
				System.out.println("Quel est le mot de passe de cet utilisateur ?");
				String mdp = sc.nextLine();
				System.out.println("Quel en le nom de cet utilisateur ?");
				String nom2 = sc.nextLine();
				System.out.println("Quel est le prénom de cet utilisateur ?");
				String prenom = sc.nextLine();
				System.out.println("Cet utilisateur est-il un administrateur ? o/n");
				String admin = sc.nextLine();
				while (!admin.equals("o") && !admin.equals("n")) {
					System.out.println("Réponse invalide. Répondez par o ou n");
					admin = sc.nextLine();
				}
				Utilisateur u;
				if (admin.equals("n")) {
					System.out.println("A quel groupe appartient cet utilisateur ?");
					for (int i = 0; i < groupes.size(); i++)
						System.out.println(groupes.get(i).getNom());
					String gr = sc.nextLine();
					u = new Utilisateur(login, mdp, nom2, prenom, false);
					ajoutUtilisateur(u, gr);
				}
				else {
					u = new Utilisateur(login, mdp, nom2, prenom, true);
					ajoutUtilisateur(u, "Administrateurs");
				}
				System.out.println("Utilisateur ajouté");
				System.out.println();
			break;
			case 10: // Supprimer un utilisateur
				System.out.println("Quel est le login de l'utilisateur à supprimer ?");
				afficherUtilisateurs();
				String supUt = sc.nextLine();
				boolean supp = false;
				for (int i = 0; i < groupes.size(); i++)
					for (int j = 0; j < groupes.get(i).getUtilisateurs().size(); j++) {
						if (groupes.get(i).getUtilisateurs().get(j).getLogin().equals(supUt)) {
							if (groupes.get(i).getUtilisateurs().get(j) != utilCourant) {
								groupes.get(i).getUtilisateurs().remove(j);
								System.out.println("Utilisateur supprimé");
								supp = true;
							}
							else
								System.out.println("Vous ne pouvez pas supprimer votre propre compte.");
						}
					}
				if (!supp)
					System.out.println("Ce login n'a pas été trouvé");
				System.out.println();
			break;
			case 11: // Modifier ou déplacer un utilisateur
				System.out.println("Quel est le login de l'utilisateur que vous voulez modifier ?");
				afficherUtilisateurs();
				String loginUtil = sc.nextLine();
				boolean trouve = false;
				boolean fini = false;
				for (int i = 0; i < groupes.size(); i++)
					for (int j = 0; j < groupes.get(i).getUtilisateurs().size(); j++) {
						if (!fini) {
							if (loginUtil.equals(groupes.get(i).getUtilisateurs().get(j).getLogin())) {
								trouve = true;
								Utilisateur modifU = groupes.get(i).getUtilisateurs().get(j);
								System.out.println("Souhaitez-vous le \n1. déplacer de groupe\n2. modifier les propriétés");
								String rep13 = sc.nextLine();
								while (!rep13.equals("1") && !rep13.equals("2")) {
									System.out.println("Réponse invalide. Répondez par 1 ou 2");
									rep13 = sc.nextLine();
								}
								if (rep13.equals("1")) { // Déplacer
									afficherUtilisateurs();
									System.out.println("Quel est le nom du groupe dans lequel vous souhaitez le déplacer ?");
									String nomGR = sc.nextLine();
									Groupe g2 = getGroupe(nomGR);
									if (g2 == null)
										System.out.println("Ce nom de groupe n'existe pas");
									else {
										g2.ajoutUtilisateur(modifU);
										groupes.get(i).getUtilisateurs().remove(j);
										System.out.println("Utilisateur déplacé");
									}
								}
								else { // Modifier
									System.out.println("Que voulez-vous modifier ?");
									System.out.println("1. Le login");
									System.out.println("2. Le mot de passe");
									System.out.println("3. Le nom");
									System.out.println("4. Le prénom");
									String rep14 = sc.nextLine();
									while (!rep14.equals("1") && !rep14.equals("2") && !rep14.equals("3") && !rep14.equals("4")) {
										System.out.println("Réponse invalide. Répondez par 1,2,3 ou 4");
										rep14 = sc.nextLine();
									}
									if (rep14.equals("1")) {
										System.out.println("Quel est le nouveau login ?");
										String log = sc.nextLine();
										while (!verifLoginLibre(log)) {
											System.out.println("Ce login existe déjà !");
											log = sc.nextLine();
										}
										modifU.setLogin(log);
										System.out.println("Login modifié");
									}
									if (rep14.equals("2")) {
										System.out.println("Quel est le nouveau de mot de passe ?");
										String mdp2 = sc.nextLine();
										modifU.setMotDePasse(mdp2);
										System.out.println("Mot de passe modifié");
									}
									if (rep14.equals("3")) {
										System.out.println("Quel est le nouveau nom ?");
										String n = sc.nextLine();
										modifU.setNom(n);
										System.out.println("Utilisateur renommé");
									}
									if (rep14.equals("4")) {
										System.out.println("Quel est le nouveau prénom ?");
										String pren = sc.nextLine();
										modifU.setPrenom(pren);
										System.out.println("Utilisateur renommé");
									}
								}
								fini = true;
							}
						}
					}
				if (!trouve)
					System.out.println("Ce login n'existe pas");
				System.out.println();
			break;
			case 12: // Ajouter un groupe
				System.out.println("Quel est le nom du groupe à ajouter ?");
				String nomGr3 = sc.nextLine();
				while (!verifNomGroupeLibre(nomGr3)) {
					System.out.println("Ce nom de groupe est déjà utilisé, choisissez-en un autre");
					nomGr3 = sc.nextLine();
				}
				int rep6 = -1;
				while (rep6 < 1 || rep6 > 4) {
					System.out.println("Quels sont les droits de ce groupe ?");
					System.out.println("1. lire");
					System.out.println("2. lire-résoudre");
					System.out.println("3. lire-résoudre-modifier");
					System.out.println("4. lire-résoudre-modifier-supprimer");
					String rep7 = sc.nextLine();
					try {
						rep6 = Integer.parseInt(rep7);
					} catch (Exception e) {
						System.out.println("Réponse invalide. Donnez un chiffre entre 1 et 4");
					}
				}
				switch (rep6) {
					case 1:
						groupes.add(new Groupe(nomGr3, "lire"));
					break;
					case 2:
						groupes.add(new Groupe(nomGr3, "lire-résoudre"));
					break;
					case 3:
						groupes.add(new Groupe(nomGr3, "lire-résoudre-modifier"));
					break;
					case 4:
						groupes.add(new Groupe(nomGr3, "lire-résoudre-modifier-supprimer"));
					break;
				}
				System.out.println("Groupe ajouté");
				System.out.println();
			break;
			case 13: // Supprimer un groupe
				System.out.println("Quel est le nom du groupe que vous souhaitez supprimer ?");
				System.out.println("Attention tous les utilisateurs de ce groupe seront supprimés");
				afficherUtilisateurs();
				String nomGr = sc.nextLine();
				Groupe gr2 = getGroupe(nomGr);
				if (gr2 == null)
					System.out.println("Ce nom de groupe n'existe pas");
				else {
					groupes.remove(gr2);
					System.out.println("Groupe supprimé");
				}
				System.out.println();
			break;
			case 14: // Modifier les droits d'un groupe
				System.out.println("Quel est le nom du groupe dont vous voulez modifier les droits ?");
				for (int i = 0; i < groupes.size(); i++)
					System.out.println(groupes.get(i).getNom() + " : " + groupes.get(i).getDroits());
				String nomGr2 = sc.nextLine();
				Groupe gr = getGroupe(nomGr2);
				if (gr == null)
					System.out.println("Ce nom de groupe n'existe pas.");
				else {
					if (gr.getNom().equals("Administrateurs"))
						System.out.println("Vous ne pouvez pas changer les droits des administrateurs.");
					else {
						int rep3 = -1;
						while (rep3 < 1 || rep3 > 4) {
							System.out.println("Quels droits choisissez-vous ?");
							System.out.println("1. lire");
							System.out.println("2. lire-résoudre");
							System.out.println("3. lire-résoudre-modifier");
							System.out.println("4. lire-résoudre-modifier-supprimer");
							String rep7 = sc.nextLine();
							try {
								rep3 = Integer.parseInt(rep7);
							} catch (Exception e) {
								System.out.println("Réponse invalide. Donnez un chiffre entre 1 et 4");
							}
						}
						switch (rep3) {
							case 1:
								gr.setDroits("lire");
							break;
							case 2:
								gr.setDroits("lire-résoudre");
							break;
							case 3:
								gr.setDroits("lire-résoudre-modifier");
							break;
							case 4:
								gr.setDroits("lire-résoudre-modifier-supprimer");
							break;
						}
					}
				}
				System.out.println();
			break;
		}
	}

	public Groupe getGroupe(String nom) {
		for (int i = 0; i < groupes.size(); i++) {
			if (groupes.get(i).getNom().equals(nom))
				return groupes.get(i);
		}
		return null;
	}


	public Probleme getPb(String nom) {
		for (int i = 0; i < pb.size(); i++) {
			if (pb.get(i).getNom().equals(nom)) {
				return pb.get(i);
			}
		}
		return null;
	}

	public void ajoutUtilisateur(Utilisateur u, String groupe) {
		Groupe gr = getGroupe(groupe);
		if (gr == null)
			System.out.println("Ce nom de groupe n'existe pas");
		else {
			gr.ajoutUtilisateur(u);
			System.out.println("Utilisateur créé");
		}
	}

	public void ajoutPb() {
		Scanner sc = new Scanner(System.in);
		System.out.println("Nom du problème ?");
		String nom = sc.nextLine();
		while (!verifNomPbLibre(nom)) {
			System.out.println("Ce nom de problème est déjà utilisé. Donnez un autre nom");
			nom = sc.nextLine();
		}
		System.out.println("Fonction objectif ?");
		String fct = sc.nextLine();
		System.out.println("Maximiser ou minimiser ?");
		String obj = sc.nextLine();
		while (!obj.equals("maximiser") && !obj.equals("minimiser")) {
			System.out.println("Réponse invalide. Répondez par maximiser ou minimiser.");
			obj = sc.nextLine();
		}
		Probleme p = new Probleme(nom);
		p.setFctObj(new FonctionObjectif(obj, fct));
		boolean nouvContr = true;
		String c = "";
		String rep3 = "";
		while (nouvContr) {
			System.out.println("Quelle contrainte ?");
			c = sc.nextLine();
			p.ajoutContr(new Contrainte(c));
			System.out.println("Ajouter une contrainte ? o/n");
			rep3 = sc.nextLine();
			while (!rep3.equals("o") && !rep3.equals("n")) {
				System.out.println("Réponse invalide. Répondez par o ou n.");
				rep3 = sc.nextLine();
			}
			if (rep3.equals("n"))
				nouvContr = false;
		}
		pb.add(p);
		System.out.println("Problème ajouté");
	}

	public void afficherProblemes() {
		for (int i = 0; i < pb.size(); i++) {
			System.out.println(pb.get(i).getNom());
			System.out.println(pb.get(i).getFctObj().getObjectif() + " : " + pb.get(i).getFctObj().getFonction());
			for (int j = 0; j < pb.get(i).getContraintes().size(); j++) {
				System.out.println(pb.get(i).getContraintes().get(j).getContrainte());
			}
			if (pb.get(i).getResultat() != null) {
				System.out.println("Meilleure solution trouvée : " + pb.get(i).getResultat().getMeilleurRes());
				for (int j = 0; j < pb.get(i).getResultat().getVariables().size(); j++)
					System.out.println(pb.get(i).getResultat().getVariables().get(j).getNom() + "=" + pb.get(i).getResultat().getVariables().get(j).getValeur());
			}
			System.out.println();
		}
	}

	public void afficherUtilisateurs() {
		for (int i = 0; i < groupes.size(); i++) {
			System.out.println("Groupe : " + groupes.get(i).getNom() + " avec les droits : " + groupes.get(i).getDroits());
			for (int j = 0; j < groupes.get(i).getUtilisateurs().size(); j++)
				System.out.println("   " + groupes.get(i).getUtilisateurs().get(j).getNom() + " " + groupes.get(i).getUtilisateurs().get(j).getPrenom() + " (" + groupes.get(i).getUtilisateurs().get(j).getLogin() + ")");
		}
		System.out.println();
	}

	public void exporter(Probleme p, String format) {
		if (format.equals("scilab") || format.equals("Scilab")) { // A exporter
			// au format
			// Scilab

		}
		else { // A exporter au format excel

		}
	}

	public boolean verifLoginLibre(String log) {
		boolean libre = true;
		for (int i = 0; i < groupes.size(); i++)
			for (int j = 0; j < groupes.get(i).getUtilisateurs().size(); j++)
				if (groupes.get(i).getUtilisateurs().get(j).getLogin().equals(log))
					libre = false;
		return libre;
	}

	public boolean verifNomPbLibre(String nom) {
		boolean libre = true;
		for (int i = 0; i < pb.size(); i++)
			if (pb.get(i).getNom().equals(nom))
				libre = false;
		return libre;
	}

	public boolean verifNomGroupeLibre(String nom) {
		boolean libre = true;
		for (int i = 0; i < groupes.size(); i++)
			if (groupes.get(i).getNom().equals(nom))
				libre = false;
		return libre;
	}

	public Groupe getGroupeUtilisateur(String login) {
		for (int i = 0; i < groupes.size(); i++)
			for (int j = 0; j < groupes.get(i).getUtilisateurs().size(); j++)
				if (login.equals(groupes.get(i).getUtilisateurs().get(j).getLogin()))
					return groupes.get(i);
		return null;
	}
}
