#!/usr/bin/env python3
"""
Script pour réparer les fichiers CSV contenant des dates corrompues avec des caractères nuls.
Ce script lit un fichier CSV, nettoie les dates corrompues, et écrit un nouveau fichier CSV corrigé.
"""

import csv
import re
import os
import sys
from datetime import datetime

def fix_corrupted_csv(input_file, output_file=None, delimiter=';'):
    """
    Répare un fichier CSV contenant des dates corrompues avec des caractères nuls.
    
    Args:
        input_file: Chemin vers le fichier CSV à réparer
        output_file: Chemin vers le fichier CSV de sortie (si None, ajoute '_fixed' au nom du fichier d'entrée)
        delimiter: Délimiteur utilisé dans le fichier CSV
    
    Returns:
        Le chemin vers le fichier CSV réparé
    """
    if output_file is None:
        base, ext = os.path.splitext(input_file)
        output_file = f"{base}_fixed{ext}"
    
    fixed_rows = []
    corrupted_count = 0
    total_count = 0
    
    # Lire le fichier CSV d'entrée
    with open(input_file, 'r') as csvfile:
        reader = csv.reader(csvfile, delimiter=delimiter)
        for row in reader:
            total_count += 1
            if not row:
                continue
                
            try:
                # Vérifier si la date est corrompue
                date_str = row[0]
                try:
                    # Essayer de parser la date directement
                    datetime.fromisoformat(date_str)
                except ValueError:
                    # Si la date est corrompue, essayer de l'extraire avec regex
                    match = re.search(r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?', date_str)
                    if match:
                        # Remplacer la date corrompue par la date extraite
                        row[0] = match.group(0)
                        corrupted_count += 1
                        print(f"Date corrompue réparée: {date_str} -> {row[0]}")
                    else:
                        print(f"AVERTISSEMENT: Impossible de réparer la date: {date_str}")
                
                fixed_rows.append(row)
            except Exception as e:
                print(f"ERREUR lors du traitement de la ligne: {e}")
    
    # Écrire le fichier CSV réparé
    with open(output_file, 'w', newline='') as csvfile:
        writer = csv.writer(csvfile, delimiter=delimiter)
        writer.writerows(fixed_rows)
    
    print(f"\nRésumé:")
    print(f"Total des lignes traitées: {total_count}")
    print(f"Lignes corrompues réparées: {corrupted_count}")
    print(f"Fichier réparé sauvegardé sous: {output_file}")
    
    return output_file

def main():
    if len(sys.argv) < 2:
        print("Usage: python fix_corrupted_csv.py <input_csv_file> [output_csv_file] [delimiter]")
        sys.exit(1)
    
    input_file = sys.argv[1]
    output_file = sys.argv[2] if len(sys.argv) > 2 else None
    delimiter = sys.argv[3] if len(sys.argv) > 3 else ';'
    
    if not os.path.exists(input_file):
        print(f"ERREUR: Le fichier {input_file} n'existe pas.")
        sys.exit(1)
    
    fixed_file = fix_corrupted_csv(input_file, output_file, delimiter)
    print(f"\nPour utiliser le fichier réparé avec follow_progress.py, exécutez:")
    print(f"python follow_progress.py {fixed_file}")

if __name__ == "__main__":
    main()