# main.py import os import shutil from fastapi import FastAPI, UploadFile, File, Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from fastapi.staticfiles import StaticFiles from cost_calculator import allowed_file, analyze_pdf, get_rate_black, get_rate_color, UPLOAD_FOLDER app = FastAPI() templates = Jinja2Templates(directory="templates") os.makedirs(UPLOAD_FOLDER, exist_ok=True) app.mount("/static", StaticFiles(directory="static"), name="static") @app.get("/", response_class=HTMLResponse) async def welcome(request: Request): return templates.TemplateResponse("landing.html", {"request": request}) @app.get("/about", response_class=HTMLResponse) async def about(request: Request): return templates.TemplateResponse("about.html", {"request": request}) @app.get("/cost", response_class=HTMLResponse) async def cost_dashboard(request: Request): return templates.TemplateResponse( "cost-calculator.html", { "request": request, "rate_black": get_rate_black(), "rate_color": get_rate_color() } ) @app.post("/upload") async def upload_file(request: Request, file: UploadFile = File(...)): if not allowed_file(file.filename): return templates.TemplateResponse( "cost-calculator.html", {"request": request, "error": "Unsupported file type. Only PDF allowed."}, ) path = os.path.join(UPLOAD_FOLDER, file.filename) with open(path, "wb") as buffer: shutil.copyfileobj(file.file, buffer) result = analyze_pdf(path) return templates.TemplateResponse( "result.html", { "request": request, "result": result, "rate_black": get_rate_black(), "rate_color": get_rate_color() }, )