import { NextRequest, NextResponse } from "next/server"; import { z } from "zod"; import { estimateManual, estimateRoleUnit } from "@/lib/estimate"; import { searchRoleUnits } from "@/lib/queries"; export const dynamic = "force-dynamic"; const Manual = z.object({ lat: z.number().min(44).max(63), lng: z.number().min(-80).max(-57), category: z.enum(["maison", "condo", "plex", "chalet", "autre"]), floorAreaSqft: z.number().positive().max(50000).nullish(), yearBuilt: z.number().int().min(1600).max(2030).nullish(), landAreaSqft: z.number().positive().nullish(), label: z.string().max(200).optional(), city: z.string().max(100).nullish() }); export function GET(req: NextRequest) { const id = req.nextUrl.searchParams.get("id"); const q = req.nextUrl.searchParams.get("q"); try { if (id) { const e = estimateRoleUnit(id); return e ? NextResponse.json(e) : NextResponse.json({ error: "Unité introuvable ou sans coordonnées" }, { status: 404 }); } if (q) return NextResponse.json({ units: searchRoleUnits(q.slice(0, 120)) }); return NextResponse.json({ error: "id ou q requis" }, { status: 400 }); } catch (e) { return NextResponse.json({ error: (e as Error).message }, { status: 503 }); } } export async function POST(req: NextRequest) { const parsed = Manual.safeParse(await req.json().catch(() => null)); if (!parsed.success) return NextResponse.json({ error: "Paramètres invalides", issues: parsed.error.issues }, { status: 400 }); try { const e = estimateManual(parsed.data); return e ? NextResponse.json(e) : NextResponse.json({ error: "Trop peu de ventes comparables autour de ce point pour produire une estimation fiable." }, { status: 422 }); } catch (e) { return NextResponse.json({ error: (e as Error).message }, { status: 503 }); } }