import { NextRequest, NextResponse } from "next/server"; import { requireAdminUser } from "@/lib/auth/middleware"; import { generateItemStructure } from "@/lib/ai/generate-item-structure"; export async function POST(request: NextRequest) { const auth = await requireAdminUser(request); if (auth instanceof NextResponse) { return auth; } const body = await request.json(); const name = typeof body?.name === "string" ? body.name.trim() : ""; const description = typeof body?.description === "string" ? body.description.trim() : ""; const scope = body?.scope === "server" ? "server" : "global"; const server = scope === "server" && typeof body?.server === "string" ? body.server.trim() : null; const categories: string[] = Array.isArray(body?.categories) ? body.categories.filter((item: unknown) => typeof item === "string") : []; const servers: string[] = Array.isArray(body?.servers) ? body.servers.filter((item: unknown) => typeof item === "string") : []; const images: string[] = Array.isArray(body?.images) ? body.images.filter((item: unknown) => typeof item === "string") : []; if (!name || !description) { return NextResponse.json( { success: false, error: "Informe nome e descrição para gerar o JSON estrutural.", }, { status: 400 } ); } const result = await generateItemStructure({ name, description, scope, server, categories, servers, images: images .slice(0, 2) .map((dataUrl) => { const [meta, base64Part] = dataUrl.split(","); const mimeMatch = meta?.match(/data:(.*);base64/); return { mimeType: mimeMatch?.[1] ?? "image/jpeg", base64Data: base64Part ?? meta, }; }) .filter((image) => image.base64Data), }); return NextResponse.json( { success: true, structure: result.structure, }, { status: 200 } ); }