import { NextRequest } from "next/server";
import { getSamples } from "@/lib/data";

export async function GET(request: NextRequest) {
  const modelId = request.nextUrl.searchParams.get("model");
  const checkpoint = request.nextUrl.searchParams.get("checkpoint");
  const language = request.nextUrl.searchParams.get("language");
  const search = request.nextUrl.searchParams.get("search");
  const page = parseInt(request.nextUrl.searchParams.get("page") || "1");
  const pageSize = parseInt(request.nextUrl.searchParams.get("pageSize") || "20");

  if (!modelId || !checkpoint) {
    return Response.json({ error: "model and checkpoint params required" }, { status: 400 });
  }

  const samples = await getSamples(modelId, checkpoint);
  if (!samples) {
    return Response.json({ error: "Not found" }, { status: 404 });
  }

  let filtered = samples;

  if (language) {
    filtered = filtered.filter((s) => s.language === language);
  }

  if (search) {
    // Try as regex first, fall back to literal
    let matcher: (text: string) => boolean;
    try {
      const re = new RegExp(search, "i");
      matcher = (text: string) => re.test(text);
    } catch {
      const lower = search.toLowerCase();
      matcher = (text: string) => text.toLowerCase().includes(lower);
    }

    filtered = filtered.filter((s) =>
      matcher(s.id) ||
      matcher(s.reference) ||
      matcher(s.hypothesis) ||
      matcher(s.language) ||
      matcher(s.ref_norm || "") ||
      matcher(s.hyp_norm || "")
    );
  }

  const total = filtered.length;
  const totalPages = Math.ceil(total / pageSize);
  const start = (page - 1) * pageSize;
  const paged = filtered.slice(start, start + pageSize);

  return Response.json({
    samples: paged,
    pagination: { page, pageSize, total, totalPages },
  });
}
