import java.util.*;

class Contact {
  int identifiant;
  String nom;
  String prenom;
  String tel;
  String email;

  Contact(int id, String nom, String prenom, String tel, String email) {
    identifiant = id;
    this.nom = nom;
    this.prenom = prenom;
    this.tel = tel;
    this.email = email;
  }

  Contact(Contact c) {
    identifiant = c.identifiant;
    nom = c.nom;
    prenom = c.prenom;
    tel = c.tel;
    email = c.email;
  }
} 

String saisieString1LettreMajuscule(String message)
{
  String s;
  char premierCaract;

  do {
    s = askString(message+" (commençant par une majuscule)");
    premierCaract = s.charAt(0);
  } while (! (premierCaract>='A' && premierCaract<='Z')); // tant qu'on est pas dans [A,B....,Y,Z]
  return s;
}

String saisieNumero(String message)
{
  String s;
  char c;
  boolean valide = false;

  do {
    s = askString(message+" (composé de 10 chiffres sans . ni espace)");
    if (s.length() == 10)                  // length() renvoie la taille de la chaine
    {
      valide = true;
      for (int i=0; i<s.length(); i++)
      {
        c = s.charAt(i);
        valide = valide && (c>='0' && c<='9'); // valide devient faux dès qu'un caractère n'est pas un chiffre
      }
    }
  } while (! valide ); 

  return s;
}

String saisieEmail(String message)
{
  String s;
  char c;
  boolean valide = false;

  do {
    s = askString(message+" (une adresse valide comporte 1 @)");
  } while (s.indexOf("@")==-1 );  // indexOf retourne -1 quand la chaine n'est pas trouvé dans la chaine s

  return s;
}


Contact saisirContact() {
  Contact c;
  int id;
  String nom, prenom, tel, email;

  // on prend l'identifiant courant et on augmente pour que le prochain soit different
  id = idUnique;
  idUnique++;

  nom = saisieString1LettreMajuscule("Veuillez saisir le nom");
  prenom = saisieString1LettreMajuscule("Veuillez saisir le prenom");
  tel = saisieNumero("Veuillez saisir le numéro de téléphone");
  email = saisieEmail("Veuillez saisir l'email");

  c = new Contact(id, nom, prenom, tel, email);

  return c;
}


void afficheContact(Contact c)
{
  // \t est une tabulation
  println(c.identifiant+"\t"+c.nom+"\t"+c.prenom+"\t"+c.tel+"\t"+c.email);
}

void ecrireContact(Contact c, PrintWriter o)
{
  o.println(c.identifiant+","+c.nom+","+c.prenom+","+c.tel+","+c.email);
}

Contact lireContact(String s) { // Pour parser la ligne
  Contact c;
  int id;
  String nom, prenom, tel, email;
  String[] tab = split(s, ","); // découpe selon les ,
  id = int(tab[0]);
  nom = tab[1];
  prenom = tab[2];
  tel = tab[3];
  email = tab[4];

  c = new Contact(id, nom, prenom, tel, email);

  return c;
}


Contact[] lireLesContacts(String nomFichier)
{
  String[] lines = loadStrings (nomFichier);
  Contact[] cs = new Contact[lines.length];

  int i = 0;
  for (String line : lines) {
    cs[i] = lireContact(line);
    i++;
  }
  return cs;
}

void afficheLesContacts(String nomFichier)
{
  String[] lines = loadStrings (nomFichier);
  Contact c;

  for (String line : lines) {
    c = lireContact(line);
    afficheContact(c);
  }
}

boolean suppressionContactParId(String nomFichier, int id)
{
  String[] lines = loadStrings (nomFichier);
  PrintWriter out;
  boolean suppression = false;

  out = createWriter (nomFichier);

  Contact c;
  for (String line : lines) {
    c = lireContact(line);
    if (c.identifiant != id)
    {
      ecrireContact(c, out);
    } else
    {
      suppression = true;
    }
  }
  out.flush();
  out.close();

  return suppression;
}

String nomFichierAgenda;
int idUnique;

void setup() {
  // on initialise le nom du fichier
  nomFichierAgenda = "agenda.txt";
  Contact[] contacts;

  // on cherche l'idUnique max
  idUnique = 1;

  // on teste si le fichier existe (NON VU EN COURS)
  File f = new File(sketchPath()+"/"+nomFichierAgenda);

  if (f.exists())
  {
    //   contacts = lireLesContacts(nomFichierAgenda);
    afficheLesContacts(nomFichierAgenda);
    suppressionContactParId(nomFichierAgenda, 1);
    afficheLesContacts(nomFichierAgenda);

    //for (Contact c : contacts) {
    //  if(c.identifiant > idUnique)
    //  {
    //    idUnique=c.identifiant+1; // a chaque fois qu'il y a un id plus grand, il prend la valeur au dessus.
    //  }
    //}
  }
}

void draw() {
  Contact[] contacts;
  Contact c;
  int choix, id;
}
