import pandas as pd
import dash
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.graph_objects as go

# Read the CSV file into a Pandas DataFrame
file_path = "texts_by_period_and_location_saparated_by_periods_in_columns.csv"
df = pd.read_csv(file_path)

# Initialize the Dash app
app = dash.Dash(__name__)

# Define the columns to summarize
columns_to_summarize = ["ancient", "old", "middle", "new", "late"]

# Create the figure for the initial graph (placeholder data)
initial_data = df.groupby("place")[columns_to_summarize].sum().reset_index()
initial_fig = go.Figure(data=[
    go.Bar(name=col, x=initial_data["place"], y=initial_data[col]) for col in columns_to_summarize
])

# Define the app layout
app.layout = html.Div([
    html.H1("Dynamic Stacked Bar Graph"),
    dcc.Dropdown(
        id="place-selector",
        options=[{"label": place, "value": place} for place in df["place"].unique()],
        multi=True,
        placeholder="Select Places",
    ),
    dcc.Graph(id="bar-graph", figure=initial_fig),
])

# Define a callback to update the graph based on selected places
@app.callback(
    Output("bar-graph", "figure"),
    [Input("place-selector", "value")]
)
def update_graph(selected_places):
    filtered_df = df[df["place"].isin(selected_places)]
    grouped = filtered_df.groupby("place")[columns_to_summarize].sum().reset_index()
    
    fig = go.Figure(data=[
        go.Bar(name=col, x=grouped["place"], y=grouped[col]) for col in columns_to_summarize
    ])
    fig.update_layout(barmode="stack")  # Set the bars to be stacked

    return fig

if __name__ == "__main__":
    app.run_server(debug=True)
