import matplotlib
matplotlib.use("TkAgg")  # Para asegurarnos de usar Tkinter como backend
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  # necesario para 3D
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

def plot_geometry_in_frame(parent_frame, geom, p1, p2):
    """
    Dibuja la geometría (Prisma/Cilindro/Esfera) en un Axes3D dentro
    de 'parent_frame' (un Frame de Tkinter). No abre ventana nueva.
    (Ejemplo de integración en tu TabDrag)
    """

    fig = plt.Figure(figsize=(4, 3), dpi=100)
    ax = fig.add_subplot(111, projection='3d')
    ax.set_title(f"{geom}", fontsize=10)

    if geom == "Prisma cuadrado":
        lado = p1
        largo = p2
        Xs = [0, lado, lado, 0, 0, lado, lado, 0]
        Ys = [0, 0, lado, lado, 0, 0, lado, lado]
        Zs = [0, 0, 0, 0, largo, largo, largo, largo]
        edges = [(0,1),(1,2),(2,3),(3,0),
                 (4,5),(5,6),(6,7),(7,4),
                 (0,4),(1,5),(2,6),(3,7)]
        for (i,j) in edges:
            ax.plot([Xs[i],Xs[j]], [Ys[i],Ys[j]], [Zs[i],Zs[j]], color='g')
        ax.set_xlim(0, max(lado,1))
        ax.set_ylim(0, max(lado,1))
        ax.set_zlim(0, max(largo,1))

    elif geom == "Cilindro":
        r = p1
        h = p2
        theta = np.linspace(0, 2*np.pi, 30)
        z = np.linspace(0, h, 30)
        theta_grid, z_grid = np.meshgrid(theta, z)
        X = r * np.cos(theta_grid)
        Y = r * np.sin(theta_grid)
        Z = z_grid
        ax.plot_surface(X, Y, Z, color='cyan', alpha=0.5)
        ax.set_xlim(-r, r)
        ax.set_ylim(-r, r)
        ax.set_zlim(0, h)

    elif geom == "Esfera":
        r = p1
        phi = np.linspace(0, np.pi, 30)
        theta = np.linspace(0, 2*np.pi, 30)
        phi_grid, theta_grid = np.meshgrid(phi, theta)
        X = r*np.sin(phi_grid)*np.cos(theta_grid)
        Y = r*np.sin(phi_grid)*np.sin(theta_grid)
        Z = r*np.cos(phi_grid)
        ax.plot_surface(X, Y, Z, color='yellow', alpha=0.6)
        ax.set_xlim(-r, r)
        ax.set_ylim(-r, r)
        ax.set_zlim(-r, r)

    else:
        ax.text2D(0.2, 0.5, "Geometría desconocida", transform=ax.transAxes)

    # Borramos lo anterior en parent_frame y embebemos el nuevo canvas
    for child in parent_frame.winfo_children():
        child.destroy()

    canvas = FigureCanvasTkAgg(fig, master=parent_frame)
    canvas_widget = canvas.get_tk_widget()
    canvas_widget.pack(fill="both", expand=True)
    canvas.draw()