import requests
from icalendar import Calendar
import mysql.connector
from datetime import datetime

URL_ICS = "https://edt.univ-lyon1.fr/jsp/custom/modules/plannings/anonymous_cal.jsp?resources=6161&projectId=1&calType=ical&firstDate=2026-08-18&lastDate=2027-08-01"

DB_CONFIG = {
    'host': 'localhost',
    'user': 'nicolas',
    'password': 'TonMotDePasseUltraSecret',
    'database': 'emploi_du_temps'
}

def fetch_and_update_db():
    print("Téléchargement de l'emploi du temps...")
    response = requests.get(URL_ICS)
    
    if response.status_code != 200:
        print("Erreur : impossible de télécharger le fichier ICS.")
        return

    cal = Calendar.from_ical(response.content)
    cours_extraits = []

    for component in cal.walk():
        if component.name == "VEVENT":
            titre = str(component.get('summary', 'Sans titre'))
            salle = str(component.get('location', 'Pas de salle'))
            description = str(component.get('description', ''))
            
            # Gestion des dates pour MySQL
            dtstart = component.get('dtstart').dt
            dtend = component.get('dtend').dt
            
            # Parfois les events ICS durent toute la journée et n'ont pas d'heure, on gère l'exception
            if hasattr(dtstart, 'strftime'):
                debut = dtstart.strftime('%Y-%m-%d %H:%M:%S')
                fin = dtend.strftime('%Y-%m-%d %H:%M:%S')
                cours_extraits.append((titre, salle, description, debut, fin))

    print(f"{len(cours_extraits)} cours trouvés. Mise à jour de la base...")

    try:
        conn = mysql.connector.connect(**DB_CONFIG)
        cursor = conn.cursor()
        
        # On vide l'ancienne semaine
        cursor.execute("TRUNCATE TABLE planning")
        
        # On insère la nouvelle
        sql = "INSERT INTO planning (titre, salle, prof_ou_desc, date_debut, date_fin) VALUES (%s, %s, %s, %s, %s)"
        cursor.executemany(sql, cours_extraits)
        conn.commit()
        
        print("Mise à jour réussie !")

    except mysql.connector.Error as err:
        print(f"Erreur SQL : {err}")
    finally:
        if 'conn' in locals() and conn.is_connected():
            cursor.close()
            conn.close()

if __name__ == "__main__":
    fetch_and_update_db()