package model;
/*
import java.io.UnsupportedEncodingException;
import java.security.*;
*/
public abstract class Utilisateur {
	protected String nom;
	protected String prenom;
	protected String login;
	protected String motDePasse;
	
	/**
	 * Type désignant un utilisateur (création complète ; utilisée par les Handlers)
	 * @param nom Nom de l'utilisateur
	 * @param prenom Prénom de l'utilisateur
	 * @param login Identifiant de l'utilisateur
	 * @param motDePasse Mot de passe de l'utilisateur
	 */
	public Utilisateur(String nom, String prenom, String login, String motDePasse) {
		this.nom = nom;
		this.prenom = prenom;
		this.login = login;
		this.motDePasse = motDePasse;
	}
	/**
	 * Type désignant un utilisateur (création rapide avec génération automatique login)
	 * @param nom Nom de l'utilisateur
	 * @param prenom Prénom de l'utilisateur
	 * @param motDePasse Mot de passe de l'utilisateur
	 */
	public Utilisateur(String nom, String prenom, String motDePasse) {
		this.nom = nom;
		this.prenom = prenom;
		this.generateLogin(nom, prenom);
		this.encryptMotDePasse(motDePasse);
	}
	/**
	 * (DEBUG) Création d'un utilisateur générique (mot de passe "azerty")
	 * @param nom Nom de l'utilisateur
	 * @param prenom Prénom de l'utilisateur
	 */
	public Utilisateur(String nom, String prenom) {
		this.nom = nom;
		this.prenom = prenom;
		this.generateLogin(nom, prenom);
		this.encryptMotDePasse("azerty");
	}	
	/**
	 * Setter du login générique par le nom et prénom
	 * @param nom Nom de l'utilisateur
	 * @param prenom Prénom de l'utilisateur
	 */
	private void generateLogin(String nom, String prenom) {
		String login = nom.concat(prenom);
		int length = Math.min(10, login.length()); /* "length" premiers caractères de nom et prénom attachés */
		login = login.toLowerCase();
		login = login.substring(0,length);
		this.login = login;
	}
	/**
	 * Getter login
	 * @return Login de l'utilisateur
	 */
	public String getLogin() {
		return login;
	}
	/**
	 * Setter login
	 * @param login Login de l'utilisateur
	 */
	public void setLogin(String login) {
		this.login = login;
	}
	/**
	 * Getter mot de passe
	 * @return Mot de passe de l'utilisateur (en MD5)
	 */
	public String getMotDePasse() {
		return this.motDePasse;
	}
	/**
	 * Setter mot de passe
	 * @param motDePasse Mot de passe de l'utilisateur
	 */
	public void setMotDePasse(String motDePasse) {
		this.motDePasse = motDePasse;
	}
	/**
	 * Setter mot de passe (avec chiffrement MD5)
	 * @param motDePasse Mot de passe de l'utilisateur
	 */
	public void encryptMotDePasse(String motDePasse) {
	/* Conversion en MD5 du mot de passe */
	/*	try {
			byte[] byteMDP = motDePasse.getBytes("UTF-8");
			try {
				MessageDigest md = MessageDigest.getInstance("MD5");
				byte[] thedigest = md.digest(byteMDP);
				this.motDePasse = thedigest.toString();
			} catch (NoSuchAlgorithmException e) {
				System.out.println("Erreur : Algorithme MD5 non trouvé.");
			}
		} catch (UnsupportedEncodingException e) {
			System.out.println("Erreur : Encodage UTF-8 non supporté.");
		} Ouais en fait ça, ça donne pas la même chose à chaque fois é_è */
		this.motDePasse = motDePasse;
	}

	/**
	 * Getter nom
	 * @return Nom de l'utilisateur
	 */
	public String getNom() {
		return nom;
	}
	/**
	 * Setter nom
	 * @param nom Nom de l'utilisateur
	 */
	public void setNom(String nom) {
		this.nom = nom;
	}
	/**
	 * Getter prénom
	 * @return Prénom de l'utilisateur
	 */
	public String getPrenom() {
		return prenom;
	}
	/**
	 * Setter prénom
	 * @param prenom Prénom de l'utilisateur
	 */
	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}
	public String toString() {
		return this.login + " (" + this.nom + " " + this.prenom + ")";
	}
	public abstract boolean equals(Object o);
}
