import tkinter as tk
from tkinter import ttk
import customtkinter as ctk

from app.controllers.controllers import all_ingredients, get_recette, new_recette, save_recette


class RecetteCreationWindow:
    def __init__(self, master):

        self.master = master
        self.recette = new_recette("nouvelle recette") # Initialisation de la recette avec un nom par défaut et des ingrédients vides

        # Label d'instruction
        self.label = tk.Label(self.master, text="Choisissez une option :")
        self.label.pack(pady=10)

        # Zone de saisie pour filtrer les options
        self.entry = tk.Entry(self.master)
        self.entry.pack(pady=5, padx=20, fill="x")
        self.entry.bind("<KeyRelease>", self.filtrer_options)

        # Widget de sélection déroulant (Combobox)
        self.options = all_ingredients()
        self.combo = ttk.Combobox(self.master, values=self.options, state="readonly")
        self.combo.pack(pady=5)

        self.entry.bind("<KeyRelease>", self.filtrer_options)

        # Label quantité
        self.label_quantite = tk.Label(self.master, text="Choisissez une quantité :")
        self.label_quantite.pack(pady=5)

        # Spinbox quantité (de 1 à 100)
        self.spin_quantite = tk.Spinbox(self.master, from_=1, to=100, width=5)
        self.spin_quantite.pack(pady=5)

        # Bouton pour valider le choix
        self.bouton = tk.Button(self.master, text="Valider", command=self.add_ingredient_to_recette)
        self.bouton.pack(pady=10)

        # Label pour afficher le résultat
        self.label_resultat = tk.Label(self.master, text="")
        self.label_resultat.pack(pady=10)

        # Zone de saisie pour entrer le nom de la recette
        self.entry_recette = tk.Entry(self.master)
        self.entry_recette.pack(pady=5, padx=20, fill="x")

        # Bouton créer une recette
        self.bouton = ctk.CTkButton(self.master, text="Créer une recette", command=self.creer_recette)
        self.bouton.pack(pady=10)

        # Bouton sauvegarder une recette
        self.bouton = tk.Button(self.master, text="Sauvegarder la recette", command=self.sauvegarder_recette)
        self.bouton.pack(pady=10)

        # Bouton charger une recette
        self.bouton = tk.Button(self.master, text="Charger la recette", command=self.charger_recette)
        self.bouton.pack(pady=10)


        # Widget pour afficher les caratéristiques de la recette

        # Label pour afficher le nom de la recette créée
        self.label_recette = tk.Label(self.master, text="")
        self.label_recette.pack(pady=10)

        # Label pour afficher les caractéristiques de la recette 
        self.label_ingredient = tk.Label(self.master, text="") #Adapter la taille du label à la taille du texte ?
        self.label_ingredient.pack(pady=10)

    def filtrer_options(self, event=None):
        texte = self.entry.get().lower()
        options_filtrees = [option for option in self.options if texte in option.lower()]
        self.combo['values'] = options_filtrees

        if options_filtrees:
            self.combo.current(0)
            self.combo.event_generate("<Down>")

    def creer_recette(self):
        texte = self.entry_recette.get().lower()
        self.recette = new_recette(texte)
        self.label_recette.config(text=f"Recette : {self.recette.get_name()}")

    def add_ingredient_to_recette(self):
        ingredient = self.combo.get()
        quantite = self.spin_quantite.get()
        self.recette.add_ingredient(ingredient, quantite)
        self.update_recette_info()

    def update_recette_info(self):
        self.label_ingredient.config(text=self.recette.info_short())
        self.label_recette.config(text=f"Recette : {self.recette.get_name()}")

    def sauvegarder_recette(self):
        save_recette(self.recette)

    def charger_recette(self):
        nom = self.entry_recette.get().lower()
        self.recette = get_recette(nom)
        if self.recette:
            self.update_recette_info()
        else:
            self.label_ingredient.config(text=f"Aucune recette trouvée avec le nom '{nom}'")