import csv
from collections import defaultdict
import mysql.connector
from mysql.connector import Error

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

# Chemin vers le fichier CSV
csv_file_path = 'donnee-data.gouv-2024-geographie2025-produit-le2025-06-04.csv'

# Dictionnaire pour stocker les taux par ville pour l'année 2024
delinquency_rates_2024 = defaultdict(list)

# Lire le fichier CSV et filtrer pour l'année 2024
with open(csv_file_path, mode='r', encoding='utf-8-sig') as file:
    reader = csv.DictReader(file, delimiter=';')
    for row in reader:
        year = int(row['annee'])
        if year == 2024:  # Ne traiter que l'année 2024
            insee_code = row['CODGEO_2025']
            taux_pour_mille = row['taux_pour_mille']

            # Ignorer les valeurs NA
            if taux_pour_mille != 'NA':
                try:
                    taux = float(taux_pour_mille.replace(',', '.'))
                    delinquency_rates_2024[insee_code].append(taux)
                except ValueError:
                    # Ignorer les erreurs de conversion
                    pass

# Calculer la moyenne pour chaque ville en 2024
averages_2024 = []
for insee_code, rates in delinquency_rates_2024.items():
    average_rate = sum(rates) / len(rates)
    averages_2024.append((insee_code, 2024, round(average_rate, 7)))

# Connexion à la base de données et insertion des données
try:
    connection = mysql.connector.connect(**db_config)
    cursor = connection.cursor()

    for insee_code, year, avg_rate in averages_2024:
        # Vérifier si le insee_code existe dans loc_cities
        check_query = "SELECT COUNT(*) FROM loc_cities WHERE insee_code = %s;"
        cursor.execute(check_query, (insee_code,))
        result = cursor.fetchone()

        if result[0] > 0:  # Si le code existe dans loc_cities
            query = """
            INSERT INTO data_delinquency (insee_code, data_year, delinquency_rate)
            VALUES (%s, %s, %s)
            ON DUPLICATE KEY UPDATE delinquency_rate = %s;
            """
            cursor.execute(query, (insee_code, year, avg_rate, avg_rate))
            print(f"Insertion réussie pour {insee_code}, année {year} : taux = {avg_rate}")
        else:
            print(f"Code INSEE {insee_code} introuvable dans loc_cities. Ignoré.")

    # Valider les changements
    connection.commit()
    print("Toutes les insertions valides pour l'année 2024 ont été effectuées avec succès.")

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

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