import { NextResponse } from "next/server";
import { getMarketStatsForNaics } from "@/lib/federal-work/naics-labels";
import { fetchPeerAwardsByNaics } from "@/lib/federal-work/usaspending-peers";
import { getNaicsForIndustry, parseStateCode } from "@/lib/sam-gov/naics-map";

export async function POST(req: Request) {
  try {
    const body = (await req.json()) as {
      industry?: string;
      industryCategory?: string;
      location?: string;
    };

    const industry = body.industryCategory ?? body.industry;
    if (!industry) {
      return NextResponse.json({ ok: false, error: "Industry is required." }, { status: 400 });
    }

    const naicsCodes = getNaicsForIndustry(body.industry ?? industry).slice(0, 2);
    const state = parseStateCode(body.location ?? "");
    const marketStats = getMarketStatsForNaics(naicsCodes);

    const peerBatches = await Promise.all(
      naicsCodes.map((code) => fetchPeerAwardsByNaics(code, state, 4)),
    );

    const seen = new Set<string>();
    const peers = peerBatches.flat().filter((p) => {
      if (seen.has(p.piid)) return false;
      seen.add(p.piid);
      return true;
    });

    return NextResponse.json({
      ok: true,
      naicsCodes,
      state: state ?? null,
      marketStats,
      peers: peers.slice(0, 8),
      piidPaste: peers
        .slice(0, 5)
        .map((p) => p.piid)
        .join(";"),
    });
  } catch (error) {
    return NextResponse.json(
      {
        ok: false,
        error: error instanceof Error ? error.message : "Could not load peer federal contractors.",
      },
      { status: 500 },
    );
  }
}
