File size: 2,386 Bytes
e947927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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)}")