# à enregistrer dans XXX_LATEX/
"""
Arborescence à respecter
|_ isbn_IMAGES/
|_ isbn_LATEX/
|_______src/
"""

import re, os

encoding_files = 'utf-8'
isbn = '095038632'
book = 'ILTPC'
rep_images = '../'+isbn+'_IMAGES/'
rep_src = 'src/'

def preprocess_logdvi_file():
    with open("logdvi.txt", "r") as file:
        content = file.read().replace('\n', '')
    
    with open("logdvi_temp.txt", "w") as file:
        file.write( content )
        
    with open("logdvi_temp.txt", "r") as file:
        line = file.readline().strip()
        L = []
        start = False
        
        for c in line:
            if (not start) and (c == '['):
                start = True
                content = ''
            elif (start) and (c == ']'):
                L.append(content)
                start = False
            elif (start):
                content += c
        
        filtered_content = [line.strip() for line in L if '<' in line]

        with open("logdvi.txt", "w") as file:
            file.write( '\n'.join(filtered_content) )
        
        content = ''
        with open("logdvi.txt", "r") as file:
            lines_tab = file.readlines()
            
        for line in lines_tab:
            if line.count('<') == 1:
                content += line
            else:
                match = re.match(r'(\d+)<', line)
                number = match.group(1)
                matches = re.findall(r'<(.*?)>', line)
                for m in matches:
                    content += number+'<'+m+'>\n'
                    
        with open("logdvi_tmp.txt", "w") as file:
            file.write( content )
            
        os.remove('logdvi.txt')
        os.rename('logdvi_tmp.txt','logdvi.txt')
                

"""
Création du dictionnaire contenant les illus. & les pages : {'illus.eps' : ['page1']}
"""

def extract_page_and_illustrations(line):
    # Utilisation d'une expression régulière pour extraire le numéro de page et les illustrations
    match = re.match(r'(\d+)(<.*?>)+', line)
    if match:
        page_number = match.group(1).zfill(3)
        illustrations = match.group(2)
        # Extraire les noms des illustrations entre les balises "<" et ">"
        illustration_names = re.findall(r'<(.*?)>', illustrations)
        # Extraire uniquement le nom de l'illustration sans le chemin
        illustration_names = [os.path.basename(name) for name in illustration_names]
        # Construire un dictionnaire avec les noms des illustrations comme clés et les numéros de page comme valeurs
        illustration_dict = {name: page_number for name in illustration_names if 'Picto' not in name}
        return illustration_dict
    else:
        return None
    
def create_dico_illus():
    # Dictionnaire pour stocker les correspondances entre les illustrations et les pages
    illustration_page_dict = {}

    # Lire le fichier logdvi.txt
    with open("logdvi.txt", "r") as file:
        for line in file:
            extracted_dict = extract_page_and_illustrations(line)
            if extracted_dict:
                # Mettre à jour le dictionnaire des correspondances entre les illustrations et les pages
                illustration_page_dict.update(extracted_dict)
                
    return illustration_page_dict

"""
Renommer les illus dans les fichiers .tex
"""
def rename_illustrations_in_tex_files(directory, eps_dict):
    # Parcourir tous les fichiers dans le répertoire spécifié
    for filename in os.listdir(directory):
        filepath = os.path.join(directory, filename)
        if os.path.isfile(filepath) and filepath.endswith(".tex"):
            with open(filepath, "r") as file:
                content = file.read()

            # Remplacer les anciens noms d'illustrations par les nouveaux noms
            for old_name, page in eps_dict.items():
                new_name = page + old_name[3:] # on remplace "xxx_nom" par "new_nom"
                # Utiliser une expression régulière pour remplacer les occurrences du nom d'illustration
                content = re.sub(r'\b%s\b' % re.escape(old_name[:-4]), new_name[:-4], content)

            # Écrire le contenu modifié dans le fichier .tex
            with open(filepath, "w") as file:
                file.write(content)
                
"""
Renommer les illustrations dans le répertoire image
"""
def rename_illustrations(directory, eps_dict):
    # Parcourir tous les fichiers dans le répertoire spécifié
    for old_name, page in eps_dict.items():
        old_path = os.path.join(directory, old_name)
        new_name = page + old_name[3:]
        new_path = os.path.join(directory, new_name)
        print(f"{old_name} --> {new_name}")
        # Renommer le fichier si nécessaire
        if os.path.exists(old_path):
            os.rename(old_path, new_path)
            #print(f"Illustration {old_name} renommée en {new_name}")
        else:
            print(f"--->{old_name} n'existe pas...")

if __name__ == "__main__":
    create_logdvi = 'dvips -o ' + isbn + '_' + book + '.ps ' + isbn + '_' + book + '.dvi 2> logdvi.txt'
    os.system(create_logdvi)
    preprocess_logdvi_file() # génère un fichier txt où, sur chaque ligne, il y a un numéro de page et les illus sur la page
    eps_dict = create_dico_illus()
    #
    rename_illustrations_in_tex_files(rep_src, eps_dict)
    rename_illustrations(rep_images, eps_dict)
