from __future__ import annotations

from jarvis_finance.dashboard.components.tables import show_table
from jarvis_finance.dashboard import data

PAGE_TITLE = "Alerts"


def _alert_button_key(card: dict[str, str], index: int, action: str) -> str:
    alert_id = card.get("_alert_id") or f"idx-{index}"
    return f"alert_{alert_id}_{action.lower()}".replace(" ", "_").replace("/", "_")


def render(st, conn) -> None:
    st.title("Alerts")
    session_state = getattr(st, "session_state", {})
    admin_mode = bool(session_state.get("jarvis_admin_mode", False)) if hasattr(session_state, "get") else False
    st.caption("Lesbare Warnkarten im User Mode. Raw rule IDs und Dedup-Details bleiben unter Admin.")
    summary = data.get_alert_summary_cards(conn)
    c1, c2, c3 = st.columns(3)
    c1.metric("Kritisch", summary["kritisch"])
    c2.metric("Wichtig", summary["wichtig"])
    c3.metric("Info", summary["info"])
    for index, card in enumerate(data.get_alert_cards(conn, limit=20)):
        st.markdown(f"### {card['severity']}: {card['title']}")
        st.write(card["description"])
        st.caption(f"Betroffen: {card['affected']} · zuletzt gesehen: {card['last_seen']}")
        cols = st.columns(3)
        for col, action in zip(cols, ["Prüfen", "Ignorieren", "Details"]):
            col.button(action, key=_alert_button_key(card, index, action))
    if admin_mode:
        with st.expander("Admin: technische Alert-Tabelle anzeigen"):
            show_table(st, data.get_alerts(conn))
