import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import threading
import time
import random

class EconomyBitcoinChart:
    def __init__(self, parent):
        """
        Inicializa los gráficos de economía mundial y Bitcoin en disposición vertical.

        Args:
            parent (tk.Frame): Frame donde se colocarán los gráficos.
        """
        self.parent = parent

        # Crear la figura para los gráficos
        self.figure = Figure(figsize=(8, 6), dpi=100)

        # Subgráficos: Economía mundial y Bitcoin
        self.ax_economy = self.figure.add_subplot(211)  # Gráfico superior
        self.ax_bitcoin = self.figure.add_subplot(212)  # Gráfico inferior

        # Inicializar datos simulados
        self.economy_data = [random.randint(50, 100) for _ in range(10)]  # Economía en meses
        self.bitcoin_data = [random.randint(20000, 60000) for _ in range(10)]  # Bitcoin en días

        self.update_economy_chart()
        self.update_bitcoin_chart()

        # Embebiendo los gráficos en Tkinter
        self.canvas = FigureCanvasTkAgg(self.figure, master=self.parent)
        self.canvas.get_tk_widget().pack(fill="both", expand=True, padx=10, pady=10)

        # Iniciar hilos para actualizar los gráficos
        threading.Thread(target=self.update_charts, daemon=True).start()

    def update_economy_chart(self):
        """Actualiza el gráfico de economía mundial."""
        self.ax_economy.clear()
        self.ax_economy.plot(self.economy_data, marker="o", color="blue")
        self.ax_economy.set_title("Economía Mundial")
        self.ax_economy.set_ylabel("Índice económico")
        self.ax_economy.grid(True)

    def update_bitcoin_chart(self):
        """Actualiza el gráfico de Bitcoin."""
        self.ax_bitcoin.clear()
        self.ax_bitcoin.plot(self.bitcoin_data, marker="o", color="green")
        self.ax_bitcoin.set_title("Precio de Bitcoin")
        self.ax_bitcoin.set_ylabel("Precio en USD")
        self.ax_bitcoin.set_xlabel("Días")  # Etiqueta para los días
        self.ax_bitcoin.grid(True)

    def update_charts(self):
        """Actualiza ambos gráficos periódicamente."""
        while True:
            # Actualizar datos simulados
            self.economy_data = self.economy_data[1:] + [random.randint(50, 100)]  # Economía en meses
            self.bitcoin_data = self.bitcoin_data[1:] + [random.randint(20000, 60000)]  # Bitcoin en días

            # Actualizar gráficos
            self.update_economy_chart()
            self.update_bitcoin_chart()
            self.canvas.draw()

            # Esperar 5 segundos antes de la próxima actualización
            time.sleep(5)
