package tpio.securite;

import tpio.AccesException;

/**
 * Un utilisateur de l'application.
 */
public class Utilisateur {
  private String nom;
  /**
   * Mot de passe. Il serait plus sûr d'enregistrer ici le md5 du mot de passe.
   */
  private String mdp;

  /**
   * Indique l'emplacement du fichier des mots de passe. 
   * Le fichier des mots de passe est considéré comme une ressource
   * de l'application.
   * Un nom relatif est relatif à l'emplacement de la classe.
   * Un nom absolu (qui commence par "/") est relatif au classpath.
   */
  private static String EMPLACEMENT_MOT_DE_PASSE = "/mdp.txt";

  /**
   * Récupère un utilisateur avec un nom de login et un mot de passe.
   * 
   * @return l'utilisateur, ou <code>null</code> si aucun utilisateur n'a ce nom
   *         et ce mot de passe.
   * @throws AccesException
   *           exception lancée si le code rencontre un problème pour accéder à
   *           l'endroit où sont entreposés les mots de passe.
   */
  public static Utilisateur getUtilisateur(String nom, char[] mdp)
      throws AccesException {
    // On vérifie que le mot de passe est le bon avant de créer une
    // nouvelle instance de Utilisateur.
    if (nomEtMdpCorrect(nom, mdp)) {
      return new Utilisateur(nom, mdp);
    } else {
      return null;
    }
  }

  /**
   * Vérifie la validité d'un mot de passe pour un utilisateur.
   * 
   * @param nom
   *          nom de l'utilisateur.
   * @param mdpTest
   *          mot de passe supposé de l'utilisateur. Tableau de longueur 0
   *          si pas de mot de passe (ne peut être null).
   * @return true si et seulement si le mot de passe est valable.
   * @throws AccesException
   *           exception lancée si le code rencontre un problème pour accéder à
   *           l'endroit où sont entreposés les mots de passe.
   */
  private static boolean nomEtMdpCorrect(String nom, char[] mdpTest)
      throws AccesException {
	// CODE A ECRIRE...
  }

  /**
   * Construit un nouvel utilisateur en passant son nom de login et son mot de
   * passe. Le nouvel utilisateur n'est créé que si les paramètres correspondent
   * bien à un login et mot de passe corrects.
   * 
   * @param nom
   *          nom de l'utilisateur.
   * @param mdp
   *          mot de passe de l'utilisateur.
   */
  private Utilisateur(String nom, char[] mdp) {
    this.nom = nom;
    this.mdp = new String(mdp);
  }

}
