#!/usr/bin/env perl
use strict;
#use Regexp::Common;#expressions regulieres; par exemples pour reconnaitre un entier $RE{num}{int} ou un reel $RE{num}{real}
use File::Basename;
use English;
my $NOM_PROG = basename $PROGRAM_NAME;#$NOM_PROG contient le nom de ce script (utile pour afficher le nom du script dans les warning (warn) ou les messages d erreur (die) )
#pattern d un reel pour les regex (pour eviter d utiliser $RE{num}{real} du package Regexp::Common qui n est pas toujours disponible)
my $format_reel = '[+-]?[\.]?\d+[\.]?\d*(?:[eE][+-]?\d*)?';



#affichage de l aide si : le premier argument est -h ou -help ou si le nombre d argument n est pas egal a 2
if ($ARGV[0] =~ /^-h$/i or $ARGV[0] =~ /^-help$/i or $#ARGV != 1) {
  print "script $NOM_PROG :\n";
  print "  USAGE... \n";
  print "    Ce script Perl s'utilise avec 2 arguments : \n";
  print "      -> 1- Nom du fichier rapport a creer\n";
  print "      -> 2- Nom de l executable HZ++\n";
  exit;
}



#recuperation des arguments
my $file = $ARGV[0];#argument 1 : nom du fichier rapport a creer
my $exeHZ = $ARGV[1];#argument 2 : executable HZ++



#-------------------------------------------------
#1) Determination de la date de lancement du test
#-------------------------------------------------
my ($sec,$min,$heure,$mjour,$mois,$annee,$sjour,$ajour,$isdst)=localtime();
$annee = $annee + 1900;
$mois = $mois + 1;
$mjour = "0$mjour" if($mjour < 10);#on rajoute un 0 devant si le nombre est inferieur a 10
$mois = "0$mois" if($mois < 10);#on rajoute un 0 devant si le nombre est inferieur a 10


#-------------------------------------------------
#2) Determination de la version HZ++
#-------------------------------------------------
#   Methode : on lance Herezh et on exploite l affichage
#             - la ligne commencant par " version" suivi du numero permet de saisir le numero de version
#             - la ligne "# (version la plus rapide )" permet de reperer si il s agit d une version HZppfast (en l absence de cette ligne, on en deduit qu il s agit d une version HZpp)
#
my @redir = qx(echo f | $exeHZ | grep version);#appel system de l executable HZ++ en redirigeant l affichage dans la variable @redir (affichage filtre par grep pour ne garder que les lignes "version")
system("rm -f ancienNom");#suppression du fichier ancienNom qui est cree par Herezh
my $no_version = 'non lue';#numero de version
my $is_fast = 0;#indicateur pour savoir si c est la version HZppfast ou non
foreach my $line (@redir) {#parcours de chaque ligne de la redirection de l affichage HZ++
  $no_version = $1 if($line =~ /version\s+($format_reel)/);
  $is_fast = 1 if($line =~ /version la plus rapide/);#si la ligne indique "version la plus rapide", alors il s agit de HZppfast
}
#construction du label de la version
my $LABEL_VERSION;
if($no_version eq 'non lue') {#si le numero de version n a pas pu etre lu => on prepare un message ECHEC pour le rapport (et on affiche un avertissement dans le terminal avec warn)
  $LABEL_VERSION = "ECHEC => impossible de lire la version HZ++ (soit c est une erreur liee a l executable HZ++ ($exeHZ), soit c est une erreur liee au script $NOM_PROG)";
  warn "\n**ATTENTION (prog:$NOM_PROG) : impossible de lire la version HZ++ (soit c est une erreur liee a l executable HZ++ ($exeHZ), soit c est une erreur liee au script $NOM_PROG)\n\n";
}
elsif($is_fast) {#si $is_fast est vrai => le label de la version sera : HZppfast $no_version
  $LABEL_VERSION = "HZppfast $no_version";
}
else {#sinon => le label de la version sera : HZpp $no_version
  $LABEL_VERSION = "HZpp $no_version";
}


#-------------------------------------------------
#3) ecriture de l en-tete du fichier rapport
#     (rq : affichage eventuel du nom de la machine si la variable environnement $HOST existe)
#-------------------------------------------------
open (FSOR,">$file");
   print FSOR "---------------------------------------\n";
   print FSOR "-           RAPPORT DE TEST           -\n";
   print FSOR "---------------------------------------\n";
   print FSOR "- version HZ++ : $LABEL_VERSION\n";
   print FSOR "\n";
   print FSOR "- date    : $mjour/$mois/$annee\n";
   print FSOR "- heure   : $heure:$min (heure locale)\n";
   if(defined $ENV{'HOST'}) {
     print FSOR "- machine : $ENV{'HOST'}\n";
   }
   else {
     print FSOR "- machine : inconnue (variable environnement \"\$HOST\" non definie)\n";
   }
   print FSOR "---------------------------------------\n\n";
close (FSOR);
