use Getopt::Std;	#permet d'utiliser les options en ligne de commande
use utf8;

use arbo;
	#module de parcours de l'arborescence. Contient une fonction pour TT et une pour Cordial
use treetagger;		
use text2xml;	
	#module de transformation des données extraites en fichier xml. Deux fonctions séparées pour chaque type d'extraction (TT ou Cordial)
use patrons;
	#module issu du programme trouve_terme. 
use graphe;
	#module issu du programme patron2graphml.

getopts( "TCxp:g", \%opts ) or print_usage();
	#on récupère les options passées en ligne de commande.
	#la fonction print_usage affiche un bref message d'aide et quitte le programme

#=========Quelques tests avant tout : ===========================

#on vérifie qu'on a bien au moins un argument donné en ligne de commande lors de l'appel du programme (le répertoire de l'arborescence à parcourir).
if (@ARGV ne 1) {
	print "vous n'avez pas specifie de repertoire de fichiers source!\n\n";
	print_usage();
}

##on vérifie qu'un étiquetteur est spécifié dans les options (soit -T soit -C):
if ((!defined($opts{C}) && !defined($opts{T}))) {
	print "vous devez choisir votre etiquetteur : -C pour Cordial ou -T pour TreeTagger\n\n";
	print_usage();
}

#si l'option -g est appelée (création d'un graphe) on vérifie qu'un fichier de patrons est bien donné aussi (nécessaire à la création du graphe!)
if ((defined($opts{g}) && !defined($opts{p}))) {
	print "vous n'avez pas specifie de fichier de patrons (option -p)!\n\n";
	print_usage();
}


#================Quelques options générales et le programme de base : ===========================


my $rep="$ARGV[0]";
my $annote='treetag.txt';
my $texte="";
    
#===============================Fonctions appelées pour l'option -T=====================

if (defined($opts{T})) {

	&arbo::ParcoursArboTT($rep);	#on appelle le parcours de l'arborescence sur le dossier
	&treetagger::TT($annote);  	#on appelle treetagger sur le fichier créé par &arbo
	print "le fichier contenant le resultat de l'extraction est texte.txt
Le fichier contenant le resultat de l'extraction annotee par TreeTagger est $annote\n";

#si l'option )x est précisée on crée le fichier xml a partir du fichier texte de l'extraction
	if (defined($opts{x})) {	
    	$fichierxml=&text2xml::TTtext2xml($annote);
    	print "le fichier xml contenant le resultat de l'extraction est : $fichierxml\n";
	}
#si une l'option -p est précisée on appelle la fonction de repérage des candidats à partir du fichier de patrons juste après l'option -p
	if (defined($opts{p})) {
		my $pattrons=$opts{p};    
    		$candidats=&patrons::TTpatrons($annote,$pattrons);
    		print "Le fichier contenant les candidats-termes est $candidats\n";
	}

}

#===============================Fonctions appelées pour l'option -C=================
if (defined($opts{C})) {

#on appelle le parcours de l'arborescence sur le dossier :
        &arbo::ParcoursArboCordial($rep);
	print "le fichier contenant le texte a annoter est texte.txt\n";
	print "Utilisez Cordial pour annoter le fichier et entrez le nom du fichier annote par Cordial : \n";
	$annote=<STDIN>;	#on récupère le nom du fichier créé par Cordial
	chomp($annote);

	if (defined($opts{x})) {
#si l'option )x est précisée on crée le fichier xml a partir du fichier texte de l'extraction
		$fichierxml=&text2xml::Cordialtext2xml($annote);
	    	print "le fichier xml contenant le resultat de l'extraction est : $fichierxml\n";
	}

#si une l'option -p est précisée on appelle la fonction de repérage des candidats à partir du fichier de patrons juste après l'option -p
	if (defined($opts{p})) {
    		my $pattrons=$opts{p};     #ou prevoir un acces au fichier via l'option -p
	    	$candidats=&patrons::Cordialpatrons($annote,$pattrons);
    	print "Le fichier contenant les candidats-termes est $candidats\n";
	}


}

#===========Dans tous les cas si le graphe est demandé : ===========================
#on passe le nom du fichier de candidats à la fonction de création des fichiers de graphe :
if (defined($opts{g})) {
    ($pajekxml)=&graphe::CTTcand2gml('candidats.txt');    
#$pajekxml contient le format xml des graphes et $pajektxt contient le fichier a donner au programme Pajek
	($pajektxt)=&graphe::CTTgml2pajek($pajekxml);
	    print "Le fichier a utiliser pour creer le graphe avec le logiciel Pajek est $pajektxt\nLe fichier de graphe au format xml est $pajekxml\n";
}



#==============


sub print_usage {
	print "USAGE : perl bao.pl -C|-T [options] repertoire_a_parcourir\n
avec : \n
-T ou -C (obligatoire) permet de choisir entre un traitement avec TreeTagger ou Cordial
-x cree un fichier xml formattant les contenus extraits de l'arborescence\n
-p [fichier_de_patrons]\tlance une recherche des patrons specifies dans le fichier sur les contenus extraits. ATTENTION le fichier de patrons\n
-g (seulement si -p est specifie) cree un fichier de graphe (au format spajek) de representation des candidats trouves avec le fichier de patrons \n"; 
	exit;
}
