from fastapi import APIRouter, Request, HTTPException from fastapi.responses import HTMLResponse import api_client import config router = APIRouter() @router.get("/crop", response_class=HTMLResponse) async def crop_ui(request: Request, pc_id: str): """Interface utilisateur pour le crop du nuage de points""" embed_url = f"{config.BACKEND_URL}/viewer-embed/{pc_id}" return request.app.state.templates.TemplateResponse( "partials/crop.html", {"request": request, "pc_id": pc_id, "embed_url": embed_url}, ) @router.post("/crop", response_class=HTMLResponse) async def crop(request: Request, pc_id: str, box: dict): """ Traite la requête de crop : 1. Envoie la box 3D au backend 2. Le backend utilise PDAL pour cropper le nuage 3. Retourne le nouveau pc_id pour l'affichage """ try: # Envoi de la requête de crop au backend result = await api_client.crop_pointcloud(pc_id, box) if result.get("ok"): new_pc_id = result.get("id") return request.app.state.templates.TemplateResponse( "partials/upload_result.html", {"request": request, "result": { "id": new_pc_id, "filename": f"{pc_id}_cropped.las", "size_mb": result.get("size_mb", 0), "conversion_time_seconds": result.get("conversion_time_seconds", 0), }, "error": None}, ) else: return request.app.state.templates.TemplateResponse( "partials/upload_result.html", {"request": request, "error": result.get("detail", "Erreur inconnue"), "result": None}, ) except Exception as e: return request.app.state.templates.TemplateResponse( "partials/upload_result.html", {"request": request, "error": str(e), "result": None}, )