import plotly.graph_objects as go
import pandas as pd
import numpy as np

# Ejemplo de datos
np.random.seed(42)
dates = pd.date_range('2023-01-01', periods=100)
values = np.cumsum(np.random.randn(100))

# Crear el gráfico de líneas
fig = go.Figure()

fig.add_trace(go.Scatter(
    x=dates,
    y=values,
    mode='lines',
    name='Datos'
))

# Añadir el cursor intermitente
fig.add_trace(go.Scatter(
    x=[dates[-1]],
    y=[values[-1]],
    mode='markers',
    marker=dict(size=15, color='red', symbol='circle', opacity=0.6),
    name='Último dato'
))

# Crear frames para la animación
frames = [go.Frame(data=[go.Scatter(
    x=[dates[-1]],
    y=[values[-1]],
    mode='markers',
    marker=dict(size=15, color='red', symbol='circle', opacity=opacity),
    name='Último dato'
),
    go.Scatter(
        x=dates,
        y=values,
        mode='lines',
        name='Datos'
    )
]) for opacity in np.linspace(0.2, 1, 10)]

fig.frames = frames

# Configurar la animación del cursor intermitente
fig.update_layout(
    updatemenus=[dict(
        type="buttons",
        showactive=False,
        buttons=[dict(label="Play",
                      method="animate",
                      args=[None, {"frame": {"duration": 500, "redraw": True}, "fromcurrent": True, "transition": {"duration": 0}}])]
    )]
)

fig.show()
