package src.Controller;

import java.net.InetAddress;
import java.util.ArrayList;

public class ListUtilisateurs {

	private ArrayList<Utilisateur> actifUsers ; 
	
	public ListUtilisateurs() {
		this.actifUsers = new ArrayList<Utilisateur>() ;
	}
	/**
     * Ajouter des utilisateurs actifs dans l'attribut liste 'actifUsers'
     * 
     * @param u on va rajouter cet utilisateur dans la liste
     */
	public void addList(Utilisateur u) {
		if((verifierUnicite(u.getPseudo()))) {
			this.actifUsers.add(u);
		}
		
		
	}
	
	/**
     * Recuperer un utilisateur à partir de son pseudo
     * 
     * @param pseudo Pseudo de l'utilisateur que l'on souhaite retrouver
     */
	public Utilisateur getPseudoList(String pseudo) {
		for(Utilisateur elem: this.actifUsers)
        {
        	 if (elem.getPseudo().equals(pseudo) ) {
        		 return elem ;
        	 }
        }
		return null ;
	}
	
	public Utilisateur getIPList(InetAddress ip) throws Exception {
		for(Utilisateur elem: this.actifUsers)
        {
        	 if (elem.getIp().equals(ip) ) {
        		 return elem ;
        	 }
        }
		throw new Exception("No such user with this IP address") ;
	}
	
	/**
     * Supprimer de la liste des utilisateurs actifs 'actifUsers' un certain utilisateur
     * 
     * @param u on va supprimer cet utilisateur dans la liste
     */
	public void supprimerList(Utilisateur u) {
		Boolean Sup = false ;
		for(Utilisateur elem: this.actifUsers)
        {
        	 if (elem.equals(u) ) {
        		 this.actifUsers.remove(elem);
        		 Sup = true ;
        		 this.afficherListeUtilisateurs();
        	 }
        }
		if (!Sup) {
		    System.out.println("Tentative de retirer un objet non contenu dans la liste");
		}
	}
	
	/**
     * Modifie le nom d'un utilisateur dans la liste des utilisateurs actifs 'actifUsers' 
     * 
     * @param ancien correspond au pseudo remplacer
     * @param nouveau correspond au nouveau pseudo
     */
	public void modifierList(String ancien , String nouveau) {
		for(Utilisateur elem: this.actifUsers)
        {
        	 if (ancien.equals( elem.getPseudo() ) ) {
        		 this.actifUsers.remove(elem);
        		 elem.setPseudo(nouveau);;
        		 this.addList(elem);
        		 
        	 }
        }
		this.afficherListeUtilisateurs();
	} 
	
	public Boolean appartient(Utilisateur u) {
		return this.actifUsers.contains(u);
	}
	 
	

	/**
     * Verifie qu'aucun autre utilisateur ne possède le même pseudo
     * 
     * @param u on va supprimer cet utilisateur dans la liste
     */
	public Boolean verifierUnicite(String pseudo) {
		for(Utilisateur elem: this.actifUsers)
        {
        	 if (pseudo.equals( elem.getPseudo() ) ) {
        		 return false ;
        	 }
        }
		return true;
	}
	
	/**
     * Méthode affichant la liste des utilisateurs actifs
     * 
     */
	public String afficherListeUtilisateurs() {
		System.out.println ("Liste des utilisateurs actifs : ");
		String Utilisateur = "" ;
		for(Utilisateur elem: this.actifUsers)
        {
        	 System.out.println (elem.toString());
        	 Utilisateur += (elem + "\n");
        }	      
		return Utilisateur;
	}
}
