from fastapi import APIRouter, HTTPException from pydantic import BaseModel from typing import List, Optional from Routes.helpers.report_generation_helpers import return_html_report, html_to_pdf_via_api # Router initialization Report_Generation_Router = APIRouter(prefix="/report_generation", tags=["Report_Generation"]) # ---------- MODELS ---------- class PageOptions(BaseModel): include_cover_page: bool include_header_footer: bool class ReportRequest(BaseModel): format_type: str # "pdf" or "html" reportname: str include_citations: bool success: bool list_of_queries: List[str] theme: str pageoptions: PageOptions class ReportResponse(BaseModel): report_generation_status: str report_url: Optional[str] = None # for PDF storage or link html_content: Optional[str] = None # for direct HTML return GeGenerated_report_details: Optional[str] = None # ---------- ROUTES ---------- @Report_Generation_Router.post("/generate_report", response_model=ReportResponse) async def generate_html_report(report_request: ReportRequest): """ Generates a static HTML report using Gemini AI. """ try: html_content = return_html_report() return ReportResponse( report_generation_status="success", html_content=html_content, GeGenerated_report_details="HTML report generated successfully." ) except Exception as e: raise HTTPException(status_code=500, detail=f"HTML report generation failed: {str(e)}") @Report_Generation_Router.post("/save_generated_report", response_model=ReportResponse) async def save_generated_report(report_request: ReportRequest): """ Generates HTML and converts it to a PDF file via external API. """ try: html_content = return_html_report() generated_report = html_to_pdf_via_api(html_content) # Extract PDF base64 or URL from the response pdf_result_info = generated_report.get("pdf_base64", "PDF generated successfully") return ReportResponse( report_generation_status="success", report_url=None, # you can replace with cloud URL if uploaded GeGenerated_report_details=str(pdf_result_info) ) except Exception as e: raise HTTPException(status_code=500, detail=f"PDF report generation failed: {str(e)}")