import sys; from pathlib import Path; sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) import streamlit as st from clauseguard.ui import _init_session_state, render_sidebar, _build_safer_contract, CUSTOM_CSS st.set_page_config(page_title="Downloads — ClauseGuard", page_icon="🛡️", layout="wide", initial_sidebar_state="expanded") st.markdown(CUSTOM_CSS, unsafe_allow_html=True) _init_session_state() render_sidebar() if st.session_state.report is None: st.warning("No analysis yet. Upload a contract on the **Home** page first, or click **Instant Demo**.") st.stop() report = st.session_state.report s = report.summary st.markdown("## 📥 Download Your Report") st.caption("Download the full analysis in your preferred format to share with legal counsel or reference later.") dl_cols = st.columns(3) with dl_cols[0]: st.download_button( "📝 Download Markdown Report", data=report.markdown_report or "# ClauseGuard Report\n\nRun analysis first.", file_name=f"clauseguard_report_{report.contract_name.replace('.','_')}.md", mime="text/markdown", use_container_width=True, ) with dl_cols[1]: safe_contract = _build_safer_contract(report) st.download_button( "🛡️ Download Safer Contract", data=safe_contract, file_name=f"safer_{report.contract_name.replace('.txt','').replace('.pdf','').replace('.docx','')}.txt", mime="text/plain", use_container_width=True, ) with dl_cols[2]: csv_lines = ["Clause ID,Type,Severity,Risk Title,Risk Reason,Recommended Action,Plain English,Negotiation Message"] for sc in report.scored_clauses: csv_lines.append( f'"{sc.clause.id}","{sc.clause.clause_type.value}","{sc.finding.severity.value}","{sc.finding.risk_title}","{sc.finding.risk_reason}","{sc.finding.recommended_action}","{sc.clause.plain_english or ""}","{sc.finding.negotiation_message or ""}"' ) st.download_button( "📊 Download CSV Data", data="\n".join(csv_lines), file_name=f"clauseguard_data_{report.contract_name.replace('.','_')}.csv", mime="text/csv", use_container_width=True, ) st.caption( f"Generated {report.generated_at.strftime('%B %d, %Y at %H:%M')} " f"• {s.contract_type} • {s.total_clauses} clauses analyzed" f"{' • ⚠️ Partial analysis' if not report.processed_normally else ''}" )