import csv
import mysql.connector
import re
from mysql.connector import Error

def insert_data_from_csv(file_path, db_config):
    try:
        # Connexion à la base de données
        connection = mysql.connector.connect(**db_config)
        cursor = connection.cursor()

        # Lecture du fichier CSV
        with open(file_path, mode='r', encoding='utf-8-sig') as csv_file:
            csv_reader = csv.DictReader(csv_file, delimiter=';')

            for index, row in enumerate(csv_reader, start=1):
                try:
                    # Correction du nom de la colonne 'Type' en supprimant le BOM
                    row = {k.strip('\ufeff'): v for k, v in row.items()}

                    # Extraction des données nécessaires
                    service_name = row.get('Nom', None)
                    original_category = row.get('Type', None)
                    city = row.get('Commune', None)
                    insee_code = row.get('Code Commune', None)

                    # Nettoyage et tronquage du numéro de téléphone
                    phone = row.get('Téléphone', None)
                    if phone:
                        phone = re.sub(r'[^\d+]', '', phone)
                        phone = phone[:20]

                    website = row.get('Site Web', None)
                    opening_hours = row.get("Heures d'ouverture", None)

                    # Extraction des coordonnées géographiques
                    osm_point = row.get('OSM Point', None)
                    if osm_point:
                        latitude = osm_point.split(',')[0].strip()
                        longitude = osm_point.split(',')[1].strip()
                    else:
                        latitude, longitude = None, None

                    # Affichage des valeurs avant insertion
                    print(f"Insertion de la ligne {index}:")
                    print(f"  service_name: {service_name}")
                    print(f"  category: commerce")
                    print(f"  original_category: {original_category}")
                    print(f"  city: {city}")

                    # Requête SQL pour insérer les données
                    query = """
                    INSERT INTO public_services
                    (service_name, category, original_category, city, insee_code, phone, website, opening_hours, latitude, longitude)
                    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                    """

                    # Exécution de la requête
                    cursor.execute(query, (
                        service_name, "commerce", original_category, city, insee_code, phone, website, opening_hours, latitude, longitude
                    ))

                except Error as e:
                    print(f"Erreur lors de l'insertion de la ligne {index}: {e}")
                    connection.rollback()
                    continue

        # Validation des modifications
        connection.commit()
        print(f"\nTransaction validée avec succès. Total : {index} lignes.")

    except Error as e:
        print(f"Erreur lors de la connexion ou de l'insertion: {e}")

    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()
            print("Connexion à la base de données fermée.")

# Configuration de la base de données
db_config = {
    'host': 'localhost',
    'database': 'immo_new',
    'user': 'root',
    'password': '_z7b6CJc'
}

# Chemin vers le fichier CSV
file_path = 'osm-france-shop-craft-office.csv'

# Appel de la fonction pour insérer les données
insert_data_from_csv(file_path, db_config)
