#-------- Importation des modules utilisé pour le BAO-2 et pour le rubrique c'est 3476 "Cinema" ---------
import re, sys, spacy_udpipe
from pathlib import Path
udpipe = spacy_udpipe.load("fr-sequoia")

# RegEx pour checher le titre et le description
regex_item = re.compile("<item><title>(.*?)<\/title>.*?<description>(.*?)<\/description>")

#--------------Sous-Programme-Nettoyage----------------
# nettoyage du texte pour se debarasser des balaises et d'avoir un texte propore
def nettoyage(texte):
    texte_net = re.sub("<!\[CDATA\[(.*?)\]\]>", "\\1", texte) 
    return texte_net

#--------------Sous-Programme-Extraction_de_Fil--------------
# Extraction des titres et descriptions d'un fichier RSS, argument-1: Fichier RSS, 2: Fichier XML, 3: Fichier TXT
def extract_un_fil(fichier_rss, output_xml, output_txt):
    with open(fichier_rss, "r") as input_rss:   # Ouverture de fichier RSS en mode lecture.
            lignes=input_rss.readlines()    # Lire le ficher ligne par ligne
            texte="".join(lignes)       # Jointure des lignes
            for m in re.finditer(regex_item, texte):
                titreNet = nettoyage(m.group(1))    # Netoyer le titre et le stocker comme titreNet
                # 0 correspond à l'intégralité et 1 correspond au premier groupe de parenthèses du match.
                descriptionNet = nettoyage(m.group(2))  # Netoyer la description et le stocker comme descriptionNet
                # On fait passer le titreNet et descriptionNet dans la fonctionne "analyse_txt" et on les stock dans le fichier TXT et XML avec des balises
                output_txt.write(titreNet), output_txt.write(descriptionNet)
                output_txt.write("\n")
                output_xml.write(f"<item><titre>\n{titreNet}</titre><description>\n{descriptionNet}</description></item>\n")

#--------------Sous-Programme-Parcours--------------
# La fonction parcours prend en arguments-1: le chemin, 2: Fichier XML, 3: Fichier TXT, 4: Numéro de rubrique qu'est 
def parcours(dossier:Path, fichier_xml, fichier_txt, rubrique):
    print(f"On traite {dossier}") 
    for sub in sorted(dossier.iterdir()): 
        if sub.is_dir():    # Verification du dossier
            parcours(sub, fichier_xml, fichier_txt, rubrique)
        if sub.is_file() and sub.name.endswith(".xml") and rubrique in sub.name:  # Verification du fichier XML
            print(f"On appelle extract_un_fil sur {sub}")
            extract_un_fil(sub, fichier_xml, fichier_txt)

#--------------Sous-Programme-main--------------
def main(): # Poru lancer le scrpt avec de parametres dans le terminal.
    dossier = Path(sys.argv[1])   # Assigner le ARGV
    rubrique=sys.argv[2]
    with open("corpusTitreDesc"+rubrique+".xml", "w") as fichier_xml:   # Ouverture de fichier XML et TXT en mode écriture
        with open("corpusTitreDesc"+rubrique+".txt", "w") as fichier_txt:
           fichier_xml.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<corpus>\n")  # Creation de balise corpus dans le fichier XML
           parcours(dossier, fichier_xml, fichier_txt, rubrique)    # Ecriture dans le fichier XML et TXL
           fichier_xml.write("</corpus>\n")     # Fermeture de balise corpus dans le fichier XML

#--------------Lancement des Sous-Programmes--------------
# Lancement de fonctionne "main"
if __name__=="__main__":
    main()