import { NextResponse, type NextRequest } from "next/server";
import { dilimAra } from "@/lib/db";
import { programOzetle } from "@/features/liste/liste-queries";
import {
  PUAN_TURLERI,
  type DilimKey,
  type PuanTuruKey,
} from "@/types/yokatlas";

const SAYFA_BOYU = 20;

const DILIMLER: DilimKey[] = ["hayal", "dengeli", "garanti"];

// Sonuç sayfasındaki ham tablonun "daha fazla göster" sayfalaması: dilim
// başına SAYFA_BOYU program, yakından uzağa sıralı. İlk sayfa server
// component'te render edilir (bkz. sonuc/page.tsx); devamı buradan akar.
export function GET(request: NextRequest) {
  const { searchParams } = request.nextUrl;
  const sira = Number.parseInt(searchParams.get("sira") ?? "", 10);
  const turParam = searchParams.get("tur") ?? "say";
  const tur: PuanTuruKey =
    turParam in PUAN_TURLERI ? (turParam as PuanTuruKey) : "say";
  const dilimParam = searchParams.get("dilim") ?? "";
  const offset = Number.parseInt(searchParams.get("offset") ?? "0", 10);

  if (!Number.isFinite(sira) || sira < 1 || sira > 4_000_000) {
    return NextResponse.json(
      { error: "Geçerli bir sıralama gerekli." },
      { status: 400 },
    );
  }
  if (!DILIMLER.includes(dilimParam as DilimKey)) {
    return NextResponse.json({ error: "Geçersiz dilim." }, { status: 400 });
  }
  if (!Number.isFinite(offset) || offset < 0 || offset > 100_000) {
    return NextResponse.json({ error: "Geçersiz offset." }, { status: 400 });
  }

  const { programlar, toplam } = dilimAra(sira, tur, dilimParam as DilimKey, {
    limit: SAYFA_BOYU,
    offset,
  });
  // Tablo satırının kullanmadığı alanlar payload'a girmesin
  return NextResponse.json({ programlar: programlar.map(programOzetle), toplam });
}
