import tkinter as tk
import threading
import datetime
from tkinter import Menu, ttk

# Importación de widgets personalizados
from hilos.ChatWidget import ChatWidget  # Widget de chat en tiempo real
from hilos.MusicPlayer import MusicPlayer  # Reproductor de música
from hilos.WeatherWidget import WeatherWidget  # Widget del clima con API de OpenWeather
from hilos.SystemMonitor import SystemMonitor  # Monitor del sistema (CPU, RAM, etc.)
from hilos.ApplicationLauncher import ApplicationLauncher  # Lanzador de aplicaciones
from hilos.LanguageChart import LanguageChart  # Gráfico de lenguajes de programación

# Crear la ventana principal
root = tk.Tk()
root.title("Ventana Responsive")  # Título de la ventana
root.geometry("1000x700")  # Definir el tamaño inicial de la ventana

# Crear el menú superior de la aplicación (actualmente vacío)
menu_bar = Menu(root)
root.config(menu=menu_bar)

# Crear los frames (paneles) laterales y central
frame_izquierdo = tk.Frame(root, bg="lightblue", width=150)  # Panel lateral izquierdo
frame_central = tk.Frame(root, bg="white")  # Panel central principal
frame_derecho = tk.Frame(root, bg="lightgreen", width=150)  # Panel lateral derecho

# Ubicar los frames en la cuadrícula de la ventana
frame_izquierdo.grid(row=0, column=0, sticky="ns")  # Se extiende en dirección norte-sur
frame_central.grid(row=0, column=1, sticky="nsew")  # Se expande en ambas direcciones
frame_derecho.grid(row=0, column=2, sticky="ns")  # Se extiende en dirección norte-sur

# Añadir widgets a los paneles
weather_widget = WeatherWidget(frame_izquierdo, "API_KEY")  # Widget del clima en el panel izquierdo
app_launcher = ApplicationLauncher(frame_izquierdo)  # Lanzador de aplicaciones en el panel izquierdo
language_chart = LanguageChart(frame_izquierdo)  # Gráfico de lenguajes de programación en el panel izquierdo
chat_widget = ChatWidget(frame_derecho)  # Chat en vivo en el panel derecho
music_player = MusicPlayer(frame_derecho)  # Reproductor de música en el panel derecho

# Crear la barra de estado en la parte inferior de la ventana
barra_estado = tk.Label(root, text="Barra de estado", bg="lightgray", anchor="w")
barra_estado.grid(row=1, column=0, columnspan=3, sticky="ew")  # Se extiende horizontalmente

# Inicializar el monitor del sistema para mostrar uso de CPU, RAM, etc.
stop_event = threading.Event()  # Evento para detener el monitor al cerrar la app
system_monitor = SystemMonitor(barra_estado, stop_event)  # Monitoriza el sistema y actualiza la barra de estado

# Función para manejar el cierre de la aplicación
def on_closing():
    """Se ejecuta al cerrar la ventana, deteniendo los procesos activos."""
    stop_event.set()  # Detiene el monitor del sistema
    root.destroy()  # Cierra la ventana principal

# Asignar la función de cierre cuando el usuario intenta cerrar la ventana
root.protocol("WM_DELETE_WINDOW", on_closing)

# Iniciar el bucle principal de la aplicación
root.mainloop()
