"""Trigger analysis section β date picker, run, preview, save. Separated from overview.py so that CRUD operations work even when trigger_rules module is unavailable (e.g., standalone HuggingFace Space). """ from datetime import date, timedelta import streamlit as st from core.supabase_client import ( get_campaign_date_range, save_action_items_batch, ) from .triggers import TRIGGERS_AVAILABLE from .utils import priority_level, CATEGORY_CONFIG def render_analysis_section(campaign_id: int, base_ctx: dict): """Render trigger analysis: date picker, run button, preview, save.""" with st.expander("π νΈλ¦¬κ±° λΆμ μ€ν", expanded=True): if not TRIGGERS_AVAILABLE: st.info( "νΈλ¦¬κ±° λΆμ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€. " "μ 체 νλ‘μ νΈ νκ²½μμλ§ μ§μλ©λλ€." ) return # Date range date_range = get_campaign_date_range(campaign_id) if not date_range: st.info("μΊ νμΈ λ°μ΄ν°κ° μμ§ λκΈ°νλμ§ μμμ΅λλ€.") return _, last_date_str = date_range last_date = date.fromisoformat(last_date_str) default_start = last_date - timedelta(days=6) date_cols = st.columns(2) with date_cols[0]: start_date = st.date_input( "μμμΌ", value=default_start, key="ai_trigger_start", ) with date_cols[1]: end_date = st.date_input( "μ’ λ£μΌ", value=last_date, key="ai_trigger_end", ) if st.button("π λΆμ μ€ν", key="ai_run_triggers", type="primary", use_container_width=True): with st.spinner("14κ° νΈλ¦¬κ±° κ·μΉμ νκ° μ€..."): try: from .triggers import evaluate_triggers results = evaluate_triggers( campaign_id, start_date.isoformat(), end_date.isoformat(), ) st.session_state["ai_trigger_results"] = results except Exception as e: st.error(f"λΆμ μ€λ₯: {e}") return # Show results if available results = st.session_state.get("ai_trigger_results") if results is None: return if not results: st.success("λͺ¨λ μ§νκ° μ μ λ²μμ λλ€. νμ§λ μ νΈκ° μμ΅λλ€.") return st.markdown(f"**{len(results)}κ° μ νΈ νμ§λ¨**") # Preview cards for item in results: p_label, p_color, p_bg = priority_level(item["priority"]) cat_cfg = CATEGORY_CONFIG.get(item["category"], {"color": "#666", "icon": "π"}) st.markdown(f"""