import pandas as pd
import mysql.connector
from mysql.connector import Error

# Configuration de la connexion à la base de données
db_config = {
    'host': 'localhost',
    'user': 'root',  # Remplacez par votre utilisateur MySQL
    'password': '_z7b6CJc',  # Remplacez par votre mot de passe MySQL
    'database': 'immo_new'
}

# Charger le fichier
file_path = 'gares-de-voyageurs.txt'
df = pd.read_csv(file_path, delimiter=';', header=None, names=['Nom', 'Trigramme', 'Segment(s) DRG', 'Position géographique', 'Code commune', 'Code(s) UIC'], skiprows=1)

# Fonction pour déterminer le type de gare
def determine_type_gare(segment_drg):
    segment_drg = str(segment_drg).upper().strip()

    # Liste des segments RER
    rer_segments = ['A', 'B', 'C', 'D', 'E']

    # Liste des segments Transilien
    transilien_segments = ['H', 'J', 'K', 'L', 'N', 'P', 'R', 'U']

    if segment_drg in rer_segments:
        return 'RER'
    elif segment_drg in transilien_segments:
        return 'TRANSLIEN'
    elif segment_drg == 'M':
        return 'METRO'
    elif segment_drg == 'T':
        return 'TRAM'
    elif segment_drg == 'TER':
        return 'TER'
    elif segment_drg == 'INTERCITÉS':
        return 'INTERCITES'
    else:
        return 'TRAIN'  # Type par défaut

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

    # Parcourir chaque ligne du fichier
    for index, row in df.iterrows():
        nom_gare = row['Nom']
        code_commune = row['Code commune']
        position_geo = str(row['Position géographique']).strip()
        segment_drg = str(row['Segment(s) DRG']).strip()

        # Vérifier si les coordonnées sont présentes et correctement formatées
        if ',' in position_geo:
            latitude, longitude = position_geo.split(', ')
        else:
            print(f"Erreur de format pour les coordonnées de : {nom_gare} (Position géographique: {position_geo})")
            continue

        # Récupérer le code postal et le nom de la ville depuis loc_cities en utilisant le code commune
        cursor.execute("SELECT city_name, postal_code FROM loc_cities WHERE insee_code = %s", (code_commune,))
        city_info = cursor.fetchone()

        if city_info:
            city_name = city_info['city_name']
            postal_code = city_info['postal_code']

            type_gare = determine_type_gare(segment_drg)

            # Requête SQL pour insérer les données
            insert_query = """
            INSERT INTO data_services
            (service_name, category, original_category, address, city, postal_code, insee_code, latitude, longitude, missions)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """

            # Valeurs à insérer
            values = (
                nom_gare,
                'transport',        # Catégorie définie à 'transport'
                'train_station',    # Sous-catégorie définie à 'train_station'
                nom_gare,           # On utilise simplement le nom de la gare sans description
                city_name,
                postal_code,
                code_commune,
                latitude,
                longitude,
                type_gare
            )

            # Exécuter la requête d'insertion
            cursor.execute(insert_query, values)
            print(f"Insertion réussie : {nom_gare} ({city_name}, INSEE: {code_commune}, Postal: {postal_code}, Type: {type_gare})")
        else:
            print(f"Code INSEE non trouvé pour : {nom_gare} (Code commune: {code_commune})")

    # Valider les modifications
    connection.commit()
    print("Insertion terminée.")

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.")
