/**
 * POST /api/backlinks/rescore  Body: { brandId: string }
 * ──────────────────────────────────────────────────────
 * Re-runs the deterministic toxicity scoring against every
 * non-disavowed backlink for a brand. Surfaced as the "Analyze
 * Toxicity" button on the Backlinks page — lets the user re-score
 * legacy rows that predate the current heuristic set, or refresh
 * scores after a heuristic tweak without a full sync.
 *
 * Free to run (pure-JS regex/comparison) so no cost cap applies.
 * Returns counts for the success toast.
 */

import { NextResponse } from "next/server";
import { getCurrentUser } from "@/lib/auth";
import { prisma } from "@/lib/prisma";
import { rescoreToxicity } from "@/lib/services/backlink-monitor";

export const dynamic = "force-dynamic";
export const maxDuration = 60;

export async function POST(req: Request) {
  const user = await getCurrentUser();
  if (!user) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });

  const body = (await req.json().catch(() => null)) as { brandId?: string } | null;
  if (!body?.brandId) return NextResponse.json({ error: "brandId required" }, { status: 400 });

  const brand = await prisma.brand.findUnique({
    where: { id: body.brandId },
    include: { organization: { include: { memberships: true } } },
  });
  if (!brand) return NextResponse.json({ error: "Brand not found" }, { status: 404 });
  if (!brand.organization.memberships.some((m) => m.userId === user.id)) {
    return NextResponse.json({ error: "Access denied" }, { status: 403 });
  }

  const summary = await rescoreToxicity(body.brandId);
  return NextResponse.json(summary);
}
