import tkinter as tk
from tkinter import messagebox, ttk
from pymongo import MongoClient

# Conectar a MongoDB
client = MongoClient("mongodb+srv://edymongodb:28Sep2007@cluster0.iklclhc.mongodb.net/?appName=Cluster0")
db = client["escuela"]
collection = db["alumnos"]

# Crear ventana
root = tk.Tk()
root.title("Buscar Alumnos")
root.geometry("500x400")

# Título
titulo = ttk.Label(root, text="Buscar en la Base de Datos", font=("Arial", 14, "bold"))
titulo.pack(pady=10)

# Frame para búsqueda
frame_busqueda = ttk.Frame(root)
frame_busqueda.pack(pady=10, padx=10, fill="x")

ttk.Label(frame_busqueda, text="Buscar por nombre:").pack(side=tk.LEFT, padx=5)
busqueda_entry = ttk.Entry(frame_busqueda, width=30)
busqueda_entry.pack(side=tk.LEFT, padx=5)

def buscar():
    nombre_busqueda = busqueda_entry.get().strip()
    
    # Limpiar el área de resultados
    resultado_text.config(state=tk.NORMAL)
    resultado_text.delete(1.0, tk.END)
    
    try:
        if nombre_busqueda == "":
            # Si no hay búsqueda, mostrar todos
            resultados = collection.find({})
            mensaje = "TODOS LOS ALUMNOS:\n" + "="*50 + "\n"
        else:
            # Buscar por nombre (búsqueda parcial)
            resultados = collection.find({"nombre": {"$regex": nombre_busqueda, "$options": "i"}})
            mensaje = f"RESULTADOS DE LA BÚSQUEDA: '{nombre_busqueda}'\n" + "="*50 + "\n"
        
        resultados_lista = list(resultados)
        
        if not resultados_lista:
            mensaje += "No se encontraron resultados"
        else:
            mensaje += f"Total encontrado: {len(resultados_lista)} alumno(s)\n" + "-"*50 + "\n\n"
            for alumno in resultados_lista:
                mensaje += f"Nombre: {alumno['nombre']}\n"
                mensaje += f"Grupo: {alumno['grupo']}\n"
                mensaje += f"Teléfono: {alumno['telefono']}\n"
                mensaje += "-"*50 + "\n"
        
        resultado_text.insert(1.0, mensaje)
        resultado_text.config(state=tk.DISABLED)
        
    except Exception as e:
        messagebox.showerror("Error", f"Error en la búsqueda: {str(e)}")

# Botón de búsqueda
ttk.Button(frame_busqueda, text="Buscar", command=buscar).pack(side=tk.LEFT, padx=5)

# Botón para mostrar todos
ttk.Button(frame_busqueda, text="Ver Todos", command=lambda: busqueda_entry.delete(0, tk.END) or buscar()).pack(side=tk.LEFT, padx=5)

# Área de resultados
ttk.Label(root, text="Resultados:").pack(pady=5, padx=10, anchor="w")

# Frame para la Scrollbar
frame_resultado = ttk.Frame(root)
frame_resultado.pack(pady=10, padx=10, fill="both", expand=True)

scrollbar = ttk.Scrollbar(frame_resultado)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

resultado_text = tk.Text(frame_resultado, height=12, width=60, yscrollcommand=scrollbar.set, state=tk.DISABLED)
resultado_text.pack(side=tk.LEFT, fill="both", expand=True)

scrollbar.config(command=resultado_text.yview)

# Funcionalidad para presionar Enter en el campo de búsqueda
busqueda_entry.bind("<Return>", lambda event: buscar())

root.mainloop()
client.close()
