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

# Conectar a MongoDB
client = MongoClient('mongodb+srv://actividad1:exam1@cluster0.fniy7ia.mongodb.net/?appName=Cluster0')
db = client['actividad1']  # Nombre de la base de datos
collection = db['exam1']  # Nombre de la colección

class MongoApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Aplicación MongoDB")
        self.root.geometry("700x500")

        # Crear pestañas
        self.notebook = ttk.Notebook(root)
        self.notebook.pack(expand=True, fill='both')

        # Pestaña Guardar
        self.save_frame = ttk.Frame(self.notebook)
        self.notebook.add(self.save_frame, text='Guardar Datos')
        self.create_save_tab()

        # Pestaña Buscar
        self.search_frame = ttk.Frame(self.notebook)
        self.notebook.add(self.search_frame, text='Buscar Datos')
        self.create_search_tab()

    def create_save_tab(self):
        # Etiquetas y entradas
        tk.Label(self.save_frame, text="Nombre:").grid(row=0, column=0, padx=10, pady=10)
        self.entry_nombre = tk.Entry(self.save_frame)
        self.entry_nombre.grid(row=0, column=1, padx=10, pady=10)

        tk.Label(self.save_frame, text="Grupo:").grid(row=1, column=0, padx=10, pady=10)
        self.entry_grupo = tk.Entry(self.save_frame)
        self.entry_grupo.grid(row=1, column=1, padx=10, pady=10)

        tk.Label(self.save_frame, text="Teléfono:").grid(row=2, column=0, padx=10, pady=10)
        self.entry_telefono = tk.Entry(self.save_frame)
        self.entry_telefono.grid(row=2, column=1, padx=10, pady=10)

        # Botón guardar
        tk.Button(self.save_frame, text="Guardar", command=self.guardar_datos).grid(row=3, column=0, columnspan=2, pady=10)

    def create_search_tab(self):
        # Elementos de la interfaz
        self.label = tk.Label(self.search_frame, text="Buscar por campo (ej: nombre):")
        self.label.pack(pady=10)

        self.entry_field = tk.Entry(self.search_frame, width=50)
        self.entry_field.pack(pady=5)

        self.entry_value = tk.Entry(self.search_frame, width=50)
        self.entry_value.pack(pady=5)

        self.search_button = tk.Button(self.search_frame, text="Buscar", command=self.search)
        self.search_button.pack(pady=10)

        self.results_text = scrolledtext.ScrolledText(self.search_frame, width=70, height=15)
        self.results_text.pack(pady=10)

    def guardar_datos(self):
        nombre = self.entry_nombre.get()
        grupo = self.entry_grupo.get()
        telefono = self.entry_telefono.get()

        if not nombre or not grupo or not telefono:
            messagebox.showerror("Error", "Todos los campos son obligatorios")
            return

        # Crear documento
        documento = {
            'nombre': nombre,
            'grupo': grupo,
            'telefono': telefono
        }

        # Insertar en MongoDB
        try:
            collection.insert_one(documento)
            messagebox.showinfo("Éxito", "Datos guardados correctamente")
            # Limpiar campos
            self.entry_nombre.delete(0, tk.END)
            self.entry_grupo.delete(0, tk.END)
            self.entry_telefono.delete(0, tk.END)
        except Exception as e:
            messagebox.showerror("Error", f"Error al guardar: {str(e)}")

    def search(self):
        field = self.entry_field.get().strip()
        value = self.entry_value.get().strip()

        if not field or not value:
            messagebox.showerror("Error", "Por favor, ingresa el campo y el valor a buscar.")
            return

        try:
            # Realizar la búsqueda
            query = {field: {"$regex": value, "$options": "i"}}  # Búsqueda insensible a mayúsculas
            results = list(collection.find(query))

            # Limpiar el área de resultados
            self.results_text.delete(1.0, tk.END)

            if results:
                for doc in results:
                    self.results_text.insert(tk.END, str(doc) + "\n\n")
            else:
                self.results_text.insert(tk.END, "No se encontraron resultados.")

        except Exception as e:
            messagebox.showerror("Error", f"Error en la búsqueda: {str(e)}")

if __name__ == "__main__":
    root = tk.Tk()
    app = MongoApp(root)
    root.mainloop()