# -*- coding: utf-8 -*-
"""
Created on Thu Jul 31 14:04:29 2025

@author: Stéphane Pasquet
"""

# main.py

import tkinter as tk
from tkinter import ttk, filedialog
from modele import Personne, personnes
import json


class Application(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Arbre Généalogique")
        self.geometry("800x600")

        # Entrées
        self.label_nom = tk.Label(self, text="Nom :")
        self.label_nom.pack()
        self.entry_nom = tk.Entry(self)
        self.entry_nom.pack()

        self.label_date = tk.Label(self, text="Date de naissance :")
        self.label_date.pack()
        self.entry_date = tk.Entry(self)
        self.entry_date.pack()

        self.label_parent1 = tk.Label(self, text="Parent 1 :")
        self.label_parent1.pack()
        self.combo_parent1 = ttk.Combobox(self, values=list(personnes.keys()))
        self.combo_parent1.pack()

        self.label_parent2 = tk.Label(self, text="Parent 2 :")
        self.label_parent2.pack()
        self.combo_parent2 = ttk.Combobox(self, values=list(personnes.keys()))
        self.combo_parent2.pack()

        self.bouton_ajouter = tk.Button(self, text="Ajouter", command=self.ajouter_personne)
        self.bouton_ajouter.pack()
        
        self.bouton_sauvegarder = tk.Button(self, text="Sauvegarder", command=self.sauvegarder_arbre)
        self.bouton_sauvegarder.pack()
        
        self.bouton_charger = tk.Button(self, text="Charger", command=self.charger_arbre)
        self.bouton_charger.pack()


        self.canvas = tk.Canvas(self, bg="white", width=780, height=400)
        self.canvas.pack(pady=20)

    def ajouter_personne(self):
        nom = self.entry_nom.get()
        date = self.entry_date.get()
        if nom == "":
            return

        personne = Personne(nom, date)
        personnes[nom] = personne

        # Parents
        parent1 = personnes.get(self.combo_parent1.get())
        parent2 = personnes.get(self.combo_parent2.get())
        if parent1:
            personne.ajouter_parent(parent1)
        if parent2:
            personne.ajouter_parent(parent2)

        # Mise à jour de la liste dans les combobox
        self.combo_parent1['values'] = list(personnes.keys())
        self.combo_parent2['values'] = list(personnes.keys())

        self.afficher_arbre()

    def afficher_arbre(self):
        self.canvas.delete("all")
        x, y = 20, 20
        delta_y = 70
        rect_width = 150
        rect_height = 30
        positions = {}

        # Étape 1 : dessiner les boîtes et stocker leur position
        for i, personne in enumerate(personnes.values()):
            self.canvas.create_rectangle(x, y, x + rect_width, y + rect_height, fill="lightblue")
            self.canvas.create_text(x + rect_width // 2, y + rect_height // 2, text=personne.nom)
            positions[personne] = (x + rect_width // 2, y + rect_height // 2)  # centre
            y += delta_y

        # Étape 2 : dessiner les lignes parent → enfant
        for enfant in personnes.values():
            for parent in enfant.parents:
                if parent in positions and enfant in positions:
                    x1, y1 = positions[parent]
                    x2, y2 = positions[enfant]
                    self.canvas.create_line(x1, y1, x2, y2, arrow=tk.LAST)
    
    def sauvegarder_arbre(self):
        fichier = filedialog.asksaveasfilename(defaultextension=".json", filetypes=[("JSON files", "*.json")])
        if fichier:
            data = {}
            for nom, personne in personnes.items():
                data[nom] = {
                    "date_naissance": personne.date_naissance,
                    "parents": [p.nom for p in personne.parents]
                }
            with open(fichier, "w") as f:
                json.dump(data, f, indent=2)
    
    def charger_arbre(self):
        fichier = filedialog.askopenfilename(filetypes=[("JSON files", "*.json")])
        if fichier:
            with open(fichier, "r") as f:
                data = json.load(f)
    
            personnes.clear()
    
            # Étape 1 : créer les objets Personne
            for nom, infos in data.items():
                personnes[nom] = Personne(nom, infos["date_naissance"])
    
            # Étape 2 : lier les parents
            for nom, infos in data.items():
                personne = personnes[nom]
                for parent_nom in infos["parents"]:
                    parent = personnes.get(parent_nom)
                    if parent:
                        personne.ajouter_parent(parent)
    
            # Mise à jour des listes déroulantes
            self.combo_parent1['values'] = list(personnes.keys())
            self.combo_parent2['values'] = list(personnes.keys())
            self.afficher_arbre()




# Lancer l'application
if __name__ == "__main__":
    app = Application()
    app.mainloop()
