import sys
import os
import csv  # Import du module csv
import json
import asyncio
import aiohttp
import unicodedata
import re
import chardet  # Import du module chardet

# Fonction pour détecter l'encodage du fichier
def detect_file_encoding(file_path):
    with open(file_path, 'rb') as f:
        result = chardet.detect(f.read())
    return result['encoding']

# Fonction pour supprimer les caractères spéciaux non désirés
def clean_string(input_str):
    """
    Supprime les caractères spéciaux non désirés d'une chaîne de caractères.
    Conserve les lettres, les chiffres, les espaces, les traits d'union et les underscores.
    """
    if not isinstance(input_str, str):
        input_str = str(input_str)
    # Supprime tout sauf les lettres, chiffres, espaces, traits d'union et underscores
    return re.sub(r'[^\w\s_-]', '', input_str)

# Fonction pour lire le fichier CSV et collecter les valeurs uniques
def extract_unique_categories(file_path):
    mapping = {
        "Code article": "item_code",
        "Code Famille": "family_code",
        "Désignation principale": "main_designation",
        "Catégorie": "category",
        "Sous-catégories": "subcategories",
        "Gamme": "range",
        "Taille": "size",
        "Type 1": "type_1",
        "Type 2": "type_2",
        "Type 3": "type_3",
        "Type 4": "type_4"
    }

    unique_categories = set()
    unique_subcategories = set()

    try:
        encoding = detect_file_encoding(file_path)
        print(f"Encodage détecté : {encoding}")

        with open(file_path, 'r', encoding='ISO-8859-1') as csv_file:
            reader = csv.DictReader(csv_file, delimiter=';')
            headers = reader.fieldnames
            print("En-têtes CSV lus :", headers)
            print()

            for row in reader:
                # Mapper les en-têtes français aux noms anglais
                english_row = {}
                for fr_key, en_key in mapping.items():
                    value = row.get(fr_key, "")
                    if value is None:
                        value = ""
                    english_row[en_key] = value.strip()

                # Nettoyer les valeurs des champs 'category' et 'subcategories'
                category = clean_string(english_row.get('category', ""))
                subcategories = clean_string(english_row.get('subcategories', ""))

                # Ajouter les valeurs aux ensembles pour garantir l'unicité
                if category:
                    unique_categories.add(category)
                if subcategories:
                    unique_subcategories.add(subcategories)

        return unique_categories, unique_subcategories

    except FileNotFoundError:
        print(f"Le fichier CSV '{file_path}' est introuvable.")
        sys.exit(1)
    except Exception as e:
        print(f"Une erreur s'est produite lors de la lecture du fichier CSV : {e}")
        sys.exit(1)

# Fonction principale
def main():
    # Chemin vers le fichier CSV
    file_path_csv = '../files/CSV_Converter/ArticlesOutput.csv'

    # Extraire les valeurs uniques
    unique_categories, unique_subcategories = extract_unique_categories(file_path_csv)

    # Afficher les valeurs uniques
    print("Valeurs uniques dans la colonne 'Catégorie' :")
    for category in sorted(unique_categories):
        print(f"- {category}")

    print("\nValeurs uniques dans la colonne 'Sous-catégories' :")
    for subcategory in sorted(unique_subcategories):
        print(f"- {subcategory}")

if __name__ == "__main__":
    main()
