#-----------------------------------------------------------
use utf8;
use strict;
binmode(STDOUT, ":encoding(UTF-8)");
# l'encodage en sortie doit etre utf8

#-----------------------------------------------------------
# mode d'emploi :
# commande en terminal: perl bao1.pl ARGUMENT1 ARGUMENT2
# ARGUMENT1 = le nom de l'arborescence 2021 = dossier contenant les fils RSS de l'année 2021= 2021
# ARGUMENT2 = le nom de la rubrique à traiter
# Rubriques choisies : 3210 = internationale, 3224 = société

#-----------------------------------------------------------
# @ARGV variable speciale - dès qu'on lance le programme, elle va être mise à jour, ce qui est mis dedans, c'est le nom des fichiers
if ($#ARGV != 1) {print "Il manque un argument à votre programme....\n";exit;} 
# $#ARGV = indice du dernier élément dans @ARGV
# pour accéder les éléments dans une liste @A : $A[indice]
my $rep="$ARGV[0]";
my $RUBRIQUE="$ARGV[1]";

# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;

# on ajoute la référence de la rubrique dans les tires des fichier de sortie
open my $output_txt, ">:encoding(UTF-8)","./results/perl-bao1-$RUBRIQUE-corpus-titre-description.txt";
open my $output_xml, ">:encoding(UTF-8)","./results/perl-bao1-$RUBRIQUE-corpus-titre-description.xml";

my $header ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<corpus>\n";
print $output_xml $header;

#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print $output_xml "</corpus>\n";
close $output_txt;
close $output_xml;
#----------------------------------------------
exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    # shift enlever le premier élément de la liste et le stocker dans la variable first

    opendir(DIR, $path) or die "can't open $path: $!\n";
    
	# = python files=os.list(dir)
	# perl : tri naturel = tri par l'ordre de caractere
	my @files = readdir(DIR);
    closedir(DIR);

	# for file in files: (difference . @files = a list)
    foreach my $file (@files) {

		# ? 0 or 1   ^ = negation
		# /^\.\.?$/ = ceux qui sont . ou ..
		next if $file =~ /^\.\.?$/;
		
		# . operateur de concatenation
		$file = $path."/".$file;
		
		#-d (directory) renvoie True si l'élément est un dossier
		if (-d $file) {
			print "On entre dans le REPERTOIRE : $file \n";
			&parcoursarborescencefichiers($file);	#recurse!
			print "On sort du REPERTOIRE :  $file \n";
		}

		# -f = True if it's a file
		if (-f $file) {

			# on traite seulement les fichiers à la fois contenant la référence de la rubrique et ayant comme extension xml
			if ($file =~ /$RUBRIQUE.+\.xml$/) {
				print "Traitement du fichier $file \n";
				open my $input, "<:encoding(UTF-8)",$file;
				$/=undef; # par défaut cette variable contient \n
				my $ligne=<$input> ;
				close($input);

				# =~ True if the regex matched
				while ($ligne=~/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/gs) {
					my $titre=&nettoyage($1);
					my $description=&nettoyage($2);
					print $output_txt "$titre \n";
					print $output_txt "$description \n";
					print $output_txt "----------------------------\n";
					print $output_xml "<item><titre>$titre</titre><description>$description</description></item>\n";
				}
			}
		}
    }
}
#----------------------------------------------
sub nettoyage {
	my $texte=shift @_;
	$texte=~s/(^<!\[CDATA\[)|(\]\]>$)//g;
	# reg: ~s/$/\./g ajouter un point a la fin de ligne
	$texte.=".";
	#reg: ~s/\.+$/\./g remplacer plusieurs points a la fin de ligne en un seul
	$texte=~s/\.+$/\./;
	return $texte;
}
	
#----------------------------------------------