import csv
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",  # Remplacez par votre mot de passe
    "database": "immo_new"
}

# Chemin vers le fichier FINESS
finess_file_path = "etablissements_sante.csv"  # Remplacez par le chemin de votre fichier

# Mappage des catégories FINESS vers les valeurs de `category`
category_mapping = {
    "Centre Hospitalier (C.H.)": "hospital",
    "Hôpital Local": "hospital",
    "Clinique": "clinic",
    "Maison de Retraite (EHPAD)": "nursing_home",
    "Centre de Santé": "health_center",
    "Cabinet de Médecin": "doctor",
    "Cabinet de Dentiste": "dentist"
}

def clean_address(row):
    """Nettoie et formate l'adresse à partir des colonnes du fichier FINESS."""
    adresse_1 = row[5].strip() if row[5] else ""
    type_voie = row[6].strip() if row[6] else ""
    nom_voie = row[7].strip() if row[7] else ""
    complement = row[8].strip() if row[8] else ""
    boite_postale = row[9].strip() if row[9] else ""
    code_postal = row[14].strip() if row[14] else ""
    ville = row[15].strip() if row[15] else ""

    address_parts = []
    if boite_postale:
        address_parts.append(f"BP {boite_postale}")
    if adresse_1:
        address_parts.append(adresse_1)
    if type_voie and nom_voie:
        address_parts.append(f"{type_voie} {nom_voie}")
    if complement:
        address_parts.append(complement)
    address_parts.append(f"{code_postal} {ville}")

    return ", ".join(filter(None, address_parts))

def get_insee_code(code_postal):
    """Récupère le code INSEE à partir du code postal (simplifié pour l'exemple)."""
    # Cette fonction est une simplification. Pour une correspondance exacte,
    # utilisez une table de correspondance code postal -> code INSEE.
    return code_postal[:2] + "000"  # Exemple : "01" + "000" pour l'Ain

def import_finess_data():
    try:
        # Connexion à la base de données
        conn = mysql.connector.connect(**db_config)
        cursor = conn.cursor()

        # Lecture du fichier FINESS
        with open(finess_file_path, mode='r', encoding='utf-8') as file:
            csv_reader = csv.reader(file, delimiter=';')

            # Ignorer l'en-tête
            next(csv_reader)

            for row in csv_reader:
                if row[0] != "structureet":
                    continue  # Ignorer les lignes qui ne sont pas des établissements

                # Extraction des données
                raison_sociale = row[3].strip()
                adresse = clean_address(row)
                code_postal = row[14].strip()
                ville = row[15].strip()
                telephone = row[16].strip()
                type_etablissement = row[19].strip()
                latitude = None  # À remplir ultérieurement si disponible
                longitude = None  # À remplir ultérieurement si disponible

                # Déterminer la catégorie
                category = "hospital"  # Valeur par défaut
                if type_etablissement in category_mapping:
                    category = category_mapping[type_etablissement]

                # Récupérer le code INSEE (simplifié)
                insee_code = get_insee_code(code_postal)

                # Requête SQL pour insérer les données
                insert_query = """
                INSERT INTO data_services
                (service_name, address, postal_code, city, insee_code, phone, category, original_category)
                VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
                """
                values = (
                    raison_sociale,
                    adresse,
                    code_postal,
                    ville,
                    insee_code,
                    telephone,
                    category,
                    "Santé"
                )

                cursor.execute(insert_query, values)

        # Valider les modifications
        conn.commit()
        print(f"Données importées avec succès !")

    except Error as e:
        print(f"Erreur lors de l'importation des données : {e}")
        conn.rollback()

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

if __name__ == "__main__":
    import_finess_data()
