# src/reporting.py from typing import Dict import logging from src.utils.logger import setup_logger from src.utils.helpers import save_pdf logger = setup_logger(__name__) def generate_report(simulation_results: Dict[str, float], lcc: float) -> str: """ Generate a textual report based on simulation results and LCCA. :param simulation_results: Dictionary containing simulation results. :param lcc: Lifecycle Cost Analysis result. :return: Formatted report content as a string. """ report = "Mechanistic-Empirical Pavement Design Report\n" report += "="*50 + "\n\n" report += "Pavement Performance Predictions:\n" report += "-"*30 + "\n" for key, value in simulation_results.items(): report += f"{key}: {value:.4f}\n" report += f"\nLifecycle Cost Analysis (LCCA):\n" report += "-"*30 + "\n" report += f"Total Lifecycle Cost: ${lcc:,.2f}\n" report += "\nConclusion:\n" report += "The pavement design meets the required performance criteria based on the simulation results.\n" logger.info("Report generated successfully.") return report def export_report_to_pdf(report_content: str, file_path: str): """ Export the report content to a PDF file. :param report_content: The content of the report as a string. :param file_path: The path where the PDF will be saved. """ try: from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas from reportlab.lib.units import inch c = canvas.Canvas(file_path, pagesize=letter) width, height = letter textobject = c.beginText() textobject.setTextOrigin(inch, height - inch) textobject.setFont("Helvetica", 12) for line in report_content.split('\n'): textobject.textLine(line) c.drawText(textobject) c.showPage() c.save() logger.info(f"Report exported to PDF at {file_path}") except ImportError: logger.error("ReportLab is not installed. Please install it using 'pip install reportlab'") raise except Exception as e: logger.error(f"Failed to export report to PDF: {e}") raise