import { NextResponse } from "next/server";
import { canCompany, getCompanyContext } from "@/lib/company-context";
import { createAdminClient, createClient } from "@/lib/supabase-server";
import { registrarRecebimento } from "@/lib/financeiro/contas-a-receber";

export async function POST(
  req: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  const supabase = await createClient();
  const {
    data: { user },
    error: userError,
  } = await supabase.auth.getUser();
  if (userError || !user) return NextResponse.json({ error: "Não autenticado." }, { status: 401 });

  const ctx = await getCompanyContext(supabase, user);
  if (!canCompany(ctx, user.id, "financial.receivables.settle")) {
    return NextResponse.json({ error: "Sem permissão." }, { status: 403 });
  }
  const admin = createAdminClient();
  const { id } = await params;
  if (!id) return NextResponse.json({ error: "ID inválido." }, { status: 400 });

  const body = (await req.json().catch(() => null)) as Record<string, unknown> | null;
  const resultado = await registrarRecebimento({ supabase, admin, companyId: ctx.companyId, userId: user.id, receivableId: id, body });
  if (!resultado.ok) return NextResponse.json(resultado.corpo, { status: resultado.status });

  return NextResponse.json({ ok: true, account: resultado.account });
}
