import os
import shutil
from datetime import datetime
import google.generativeai as genai
import PIL.Image

# ---------------------
# CONFIGURATION
# ---------------------
photo_folder = "C:\\Users\\Antoine\\PycharmProjects\\PHOTO\\photo a organiser"
dossier_folder = "C:\\Users\\Antoine\\PycharmProjects\\PHOTO\\dossier"
genai.configure(api_key="VOTRE_CLE_API")
model = genai.GenerativeModel('gemini-1.5-flash')

# Créer le dossier de sortie s'il n'existe pas
if not os.path.exists(dossier_folder):
    os.makedirs(dossier_folder)

# ---------------------
# FONCTION POUR EXTRAIRE L'HEURE DEPUIS LE NOM DE FICHIER
# ---------------------
def get_time_from_filename(filename):
    try:
        base = os.path.splitext(filename)[0] # on met les filename dans la base
        parts = base.split("_") 
        time_part = parts[1]
        time_obj = datetime.strptime(time_part, "%H%M%S")   # on traite l'infor en temps
        return time_obj
    except Exception as e:
        print(f"Impossible d'extraire l'heure de {filename}: {e}")
        return None

# ---------------------
# LISTER ET TRIER LES PHOTOS PAR HEURE
# ---------------------
photos_raw = [f for f in os.listdir(photo_folder) if f.lower().endswith(".jpg")]

photo_times = []
for photo in photos_raw:
    time_obj = get_time_from_filename(photo)
    if time_obj:
        photo_times.append((photo, time_obj))
    else:
        print(f"Photo ignorée (nom invalide) : {photo}")

photo_times.sort(key=lambda x: x[1])  # faire un sort pour mettre l'heure du plus jeune au plus vieux.

# ---------------------
# GROUPEMENT PAR MINUTE
# ---------------------
groups = []

for photo, time_obj in photo_times:
    heure_lisible = time_obj.strftime("%H:%M:%S")  # met le texte lisible
    print(f"  {photo} → {heure_lisible}")

    if not groups:
        groups.append({"photos": [photo], "reference": time_obj})
        print(f"    → Nouveau groupe 1 (référence : {heure_lisible})")
    else:
        current_group = groups[-1]
        reference_time = current_group["reference"]
        difference = abs((time_obj - reference_time).total_seconds())  # on soustrait la reference of temps de référence

        if difference <= 60:
            current_group["photos"].append(photo)
            print(f"    → Ajouté au groupe {len(groups)} (écart : {difference:.0f}s)")
        else:
            groups.append({"photos": [photo], "reference": time_obj})
            print(f"    → Nouveau groupe {len(groups)} (référence : {heure_lisible})")

# ---------------------
# FUSIONNER LES GROUPES AVEC UNE SEULE PHOTO
# ---------------------
merged_groups = []

for i, group in enumerate(groups):
    if len(group["photos"]) == 1 and merged_groups:
        # Une seule photo → on la fusionne dans le groupe précédent
        photo = group["photos"][0]
        merged_groups[-1]["photos"].append(photo)
        print(f"  Photo seule '{photo}' fusionnée dans le groupe précédent")
    else:
        merged_groups.append(group)

groups = merged_groups

# ---------------------
# CRÉER LES DOSSIERS NUMÉROTÉS ET DÉPLACER LES PHOTOS
# ---------------------
for i, group in enumerate(groups, start=1):
    group_folder = os.path.join(dossier_folder, str(i))
    os.makedirs(group_folder, exist_ok=True)

    ref_time = group["reference"].strftime("%H:%M:%S")
    print(f"\nGroupe {i} (référence : {ref_time}) → dossier '{i}'")

    for photo in group["photos"]:
        src = os.path.join(photo_folder, photo)
        dst = os.path.join(group_folder, photo)
        shutil.move(src, dst)
        print(f"  Déplacé : {photo}")

print("\nRegroupement terminé !")