import type { Metadata } from "next";
import Link from "next/link";
import { getAllBolumler, type BolumOzet } from "@/lib/katalog";
import { KATEGORILER } from "@/lib/kategoriler";
import { JsonLd, breadcrumbJsonLd } from "@/lib/seo";
import { CtaSiraForm } from "@/components/cta-sira-form";
import { SiteFooter } from "@/components/site-footer";
import { PagePixelDivider } from "@/components/pixel-decor";

export const metadata: Metadata = {
  title: "Tüm Bölümlerin Taban Puanları ve Sıralamaları 2026",
  description:
    "Üniversite bölümlerinin 2025 yerleştirme taban puanları ve başarı sıralamaları: lisans ve önlisans programları kategori kategori, 2026 tercihleri için.",
  alternates: { canonical: "/bolumler" },
};

const sayi = (n: number) => n.toLocaleString("tr-TR");

function BolumLinkleri({ bolumler }: { bolumler: BolumOzet[] }) {
  return (
    <ul className="mt-3 grid gap-x-6 gap-y-1.5 sm:grid-cols-2 lg:grid-cols-3">
      {bolumler.map((b) => (
        <li key={b.slug}>
          <Link
            href={`/bolum/${b.slug}`}
            className="group inline-flex items-baseline gap-2 text-sm text-slate-700 hover:text-primary"
          >
            <span className="group-hover:underline">{b.ad}</span>
            <span className="text-xs text-slate-400">
              {sayi(b.programSayisi)}
            </span>
          </Link>
        </li>
      ))}
    </ul>
  );
}

function KategoriGruplari({
  bolumler,
  seviye,
}: {
  bolumler: BolumOzet[];
  seviye: "lisans" | "onlisans";
}) {
  const kalanlar = new Set(bolumler.map((b) => b.slug));
  const gruplar = KATEGORILER.map((kategori) => {
    const uyeler = bolumler.filter((b) =>
      (b.kategoriler as readonly string[]).includes(kategori),
    );
    for (const b of uyeler) kalanlar.delete(b.slug);
    return { kategori: kategori as string, uyeler };
  }).filter((g) => g.uyeler.length > 0);
  const diger = bolumler.filter((b) => kalanlar.has(b.slug));
  if (diger.length > 0) gruplar.push({ kategori: "Diğer", uyeler: diger });

  return (
    <>
      {gruplar.map(({ kategori, uyeler }) => (
        <section key={`${seviye}-${kategori}`} className="mt-8">
          <h3 className="font-heading text-lg font-bold text-slate-900">
            {kategori}
            <span className="ml-2 text-xs font-normal text-slate-400">
              {sayi(uyeler.length)} bölüm
            </span>
          </h3>
          <BolumLinkleri bolumler={uyeler} />
        </section>
      ))}
    </>
  );
}

export default function BolumlerPage() {
  const hepsi = getAllBolumler();
  const lisans = hepsi.filter((b) => b.lisans);
  const onlisans = hepsi.filter((b) => b.onlisans && !b.lisans);

  return (
    <>
      <main className="mx-auto w-full max-w-5xl px-4 py-12 sm:py-16">
        <JsonLd
          data={breadcrumbJsonLd([
            { name: "Ana Sayfa", path: "/" },
            { name: "Bölümler", path: "/bolumler" },
          ])}
        />

        <h1 className="font-heading text-3xl font-bold text-slate-900 sm:text-4xl">
          Tüm Bölümlerin Taban Puanları ve Sıralamaları 2026
        </h1>
        <p className="mt-4 max-w-3xl text-sm leading-7 text-slate-600">
          {sayi(hepsi.length)} bölümün 2025 YKS yerleştirme verileri: taban
          puanları, başarı sıralamaları, kontenjanlar ve devlet/vakıf dağılımı.
          Bölüme tıklayınca o bölümü sunan tüm üniversitelerin tablosunu
          görürsün. Veriler YÖK Atlas 2025 yerleştirme sonuçlarına dayanır; 2026
          tercihleri için rehber niteliğindedir.
        </p>

        <PagePixelDivider seed={29} className="mt-8" />

        <section className="mt-8">
          <h2 className="font-heading text-2xl font-bold text-slate-900">
            Lisans Bölümleri (4 Yıllık)
          </h2>
          <KategoriGruplari bolumler={lisans} seviye="lisans" />
        </section>

        <div className="mt-12">
          <CtaSiraForm />
        </div>

        <section className="mt-12">
          <h2 className="font-heading text-2xl font-bold text-slate-900">
            Önlisans Bölümleri (2 Yıllık — TYT)
          </h2>
          <KategoriGruplari bolumler={onlisans} seviye="onlisans" />
        </section>
      </main>
      <SiteFooter />
    </>
  );
}
