import { NextResponse } from "next/server" import { z } from "zod" import { ConvexHttpClient } from "convex/browser" import { assertAuthenticatedSession } from "@/lib/auth-server" import { DEFAULT_TENANT_ID } from "@/lib/constants" import { api } from "@/convex/_generated/api" export const runtime = "nodejs" const schema = z.object({ machineId: z.string().min(1), hostname: z.string().min(2), }) export async function POST(request: Request) { const session = await assertAuthenticatedSession() if (!session) { return NextResponse.json({ error: "Não autorizado" }, { status: 401 }) } const convexUrl = process.env.NEXT_PUBLIC_CONVEX_URL if (!convexUrl) { return NextResponse.json({ error: "Convex não configurado" }, { status: 500 }) } const payload = await request.json().catch(() => null) const parsed = schema.safeParse(payload) if (!parsed.success) { return NextResponse.json({ error: "Payload inválido", details: parsed.error.flatten() }, { status: 400 }) } const tenantId = session.user.tenantId ?? DEFAULT_TENANT_ID try { // Garante usuário no Convex e obtém seu Id const convex = new ConvexHttpClient(convexUrl) const ensured = await convex.mutation(api.users.ensureUser, { tenantId, email: session.user.email, name: session.user.name ?? session.user.email, avatarUrl: session.user.avatarUrl ?? undefined, role: session.user.role.toUpperCase(), }) const actorId = ensured?._id if (!actorId) { return NextResponse.json({ error: "Falha ao obter ID do usuário no Convex" }, { status: 500 }) } // Chamada por string reference (evita depender do tipo gerado imediatamente) const client = convex as unknown as { mutation: (name: string, args: unknown) => Promise } await client.mutation("machines:rename", { machineId: parsed.data.machineId, actorId, tenantId, hostname: parsed.data.hostname, }) return NextResponse.json({ ok: true }) } catch (error) { console.error("[machines.rename] Falha ao renomear", error) return NextResponse.json({ error: "Falha ao renomear máquina" }, { status: 500 }) } }