import { NextResponse } from "next/server";
import { callPortalBackend } from "@/lib/backend";
import { checkRateLimit, clientAddress } from "@/lib/rate-limit";

export const dynamic = "force-dynamic";

type RouteContext = { params: Promise<{ reference: string }> };

export async function POST(request: Request, context: RouteContext) {
  try {
    const { reference } = await context.params;
    if (!/^[A-Za-z0-9_-]{3,100}$/.test(reference)) {
      return NextResponse.json({ ok: false, error: "Référence invalide." }, { status: 400 });
    }

    const rate = checkRateLimit(`admin-regenerate:${clientAddress(request)}:${reference}`, 5, 60 * 60 * 1000);
    if (!rate.allowed) {
      return NextResponse.json(
        { ok: false, error: "Trop de régénérations pour ce dossier. Réessayez plus tard." },
        { status: 429, headers: { "Retry-After": String(rate.retryAfter) } },
      );
    }

    const data = await callPortalBackend<unknown>({ action: "regenerate_portal_link", reference });
    return NextResponse.json({ ok: true, data }, { headers: { "cache-control": "private, no-store" } });
  } catch (error) {
    const message = error instanceof Error ? error.message : "Régénération impossible.";
    return NextResponse.json({ ok: false, error: message }, { status: 502 });
  }
}
