from pathlib import Path
import pandas as pd
import streamlit as st

st.set_page_config(page_title="XR Session Dashboard", layout="wide")
st.title("XR Session Dashboard")

session_input = st.text_input("Session folder", value=".")
session = Path(session_input).expanduser()

if not session.exists():
    st.warning("Choose a valid session folder.")
    st.stop()

poses_path = session / "poses.csv"
events_path = session / "events.csv"
hands_path = session / "hands.csv"
camera_path = session / "camera.csv"

poses = pd.read_csv(poses_path) if poses_path.exists() else pd.DataFrame()
events = pd.read_csv(events_path) if events_path.exists() else pd.DataFrame()
hands = pd.read_csv(hands_path) if hands_path.exists() else pd.DataFrame()
camera = pd.read_csv(camera_path) if camera_path.exists() else pd.DataFrame()

c1, c2, c3, c4 = st.columns(4)
c1.metric("Pose samples", len(poses))
c2.metric("Interaction events", len(events))
c3.metric("Hand rows", len(hands))
c4.metric("RGB frames", len(camera))

if not poses.empty:
    st.subheader("HMD position")
    hmd = poses.set_index("elapsed_s")[["hmd_px", "hmd_py", "hmd_pz"]]
    st.line_chart(hmd)

if not events.empty:
    st.subheader("Interaction events")
    st.bar_chart(events["event_type"].value_counts())
    st.dataframe(events.tail(25))

if not hands.empty:
    st.subheader("Hand tracking")
    tracked = hands.groupby(["hand", "joint_valid"]).size().unstack(fill_value=0)
    st.dataframe(tracked)

camera_dir = session / "camera"
if camera_dir.exists():
    images = sorted(camera_dir.glob("*.jpg"))
    if images:
        st.subheader("Latest RGB frame")
        st.image(str(images[-1]), caption=images[-1].name)
