import sys

sys.path.append(".")

import streamlit as st

from services.ppt_generator.data_classes.project import Project
from utils.dynamo_db import DynamoDB

# Load project data
initial_project_id = "sciencedaily"

project = Project.check_project_in_db(project_id=initial_project_id)

# Initialize DynamoDB
db = DynamoDB()
research_table = db.get_table("slides_research")


def get_research(item_id):
    """Fetch research from DynamoDB with loading indicator."""
    with st.spinner("Fetching research..."):
        try:
            research = db.get_item(research_table, item_id)
            if not research:
                return f"Could not find research for {item_id}"
            return research.get("research", "")
        except Exception as e:
            return f"Error fetching research: {str(e)}"


# Inject JavaScript for scrolling to top
def scroll_to_top():
    st.markdown(
        '<a href="#top" id="scroll-to-top">⬆ Scroll to Top</a>', unsafe_allow_html=True
    )


# Streamlit app title
st.title("Presentation Research Viewer")

# Initialize session state
if "selected_section" not in st.session_state:
    st.session_state["selected_section"] = None
if "selected_slide" not in st.session_state:
    st.session_state["selected_slide"] = None

# Sidebar navigation
with st.sidebar:
    st.markdown("# Sections & Slides")

    st.session_state["project_id"] = initial_project_id
    project_id = st.text_input("Project ID", value=st.session_state["project_id"])

    if project_id != st.session_state["project_id"]:
        with st.spinner("Loading project data..."):
            project = Project.check_project_in_db(project_id=project_id)
            if project:
                st.session_state["project_id"] = project_id
                st.session_state["selected_section"] = (
                    None  # Reset selections when project changes
                )
                st.session_state["selected_slide"] = None
            else:
                st.warning("Project not found. Please enter a valid Project ID.")

    # Step 1: Select Section
    section_titles = [section.title for section in project.sections] if project else []
    if section_titles:
        selected_section = st.radio("Select a section", section_titles, index=None)
    else:
        selected_section = None
        st.warning("No sections available for this project.")

    if selected_section:
        st.session_state["selected_section"] = selected_section

        # Step 2: Select Slide within Selected Section
        slides_in_selected_section = [
            slide.title
            for section in project.sections
            if section.title == selected_section
            for slide in section.slides
        ]

        selected_slide = st.radio(
            "Select a slide", slides_in_selected_section, index=None
        )

        if selected_slide:
            st.session_state["selected_slide"] = selected_slide

# Placeholder for markdown content
content_placeholder = st.empty()

# Display selected slide research
if st.session_state["selected_section"] and st.session_state["selected_slide"]:
    scroll_to_top()

    selected_section = st.session_state["selected_section"]
    selected_slide = st.session_state["selected_slide"]

    # Find selected slide's item ID
    selected_item_id = None
    for section in project.sections:
        if section.title == selected_section:
            for slide in section.slides:
                if slide.title == selected_slide:
                    selected_item_id = (
                        f"{project.project_id}-{section.uuid}-{slide.uuid}"
                    )
                    break

    if selected_item_id:
        research_text = get_research(selected_item_id)

        # Update content dynamically
        content_placeholder.markdown(
            f"## {selected_section}\n### {selected_slide}\n#### Research\n{research_text}\n",
            unsafe_allow_html=True,
        )
