#include <Socket.h>
#include <barriere.h>
#include <clavier.h>

int main() 
{         
  Socket service("172.20.3.73", 5588);
  Afficheur afficheur(service);
  Barriere barriere(service);
  Clavier clavier(service);
  const int codeSecret = 7485;
  bool valide = false;

  // descendre la barrière au départ si elle n'est pas en bas
  if (!barriere.isInFDCL()) barriere.setCommandeSensDescente();
  
  while (true) 
  {   
    // Message d'invite
    afficheur.clear();
    afficheur.affiche(0, 0, "Bienvenue...");
 
    // contrôler la présence d'un véhicule en entrée
    while (!barriere.isBoucleAmont());
    
     // solliciter la saisie du code
    afficheur.affiche("Bonjour", "Code ? ");

    // récupérer le bon code secret
    do {
      valide = clavier.codeBon(codeSecret);
      // si le code est incorrect, avertir l'automobiliste
      if (!valide) afficheur.affiche("Code incorrect", "Code ? ");      
    }
    while (!valide);

    // afficher un message précisant la bonne valeur du code
    afficheur.affiche("Code bon", "Entrez..."); 
    
    // lever la barrière pour permettre l'entrée du véhicule
    barriere.setCommandeSensMontee();
    
    // attendre que le véhicule pénètre complètement dans le parking
    while (!(barriere.isBoucleAval() && barriere.isBoucleAmont())); 
    while (barriere.isBoucleAval());
    
    // descendre la barrière une fois que le véhicule est bien entré
    barriere.setCommandeSensDescente();   
  }
 
  return 0;
}