import type { Metadata } from "next";
import { eq } from "drizzle-orm";
import {
  PUAN_TURLERI,
  rankWindowFacets,
  searchByRank,
  type PuanTuruKey,
} from "@/lib/db";
import { getSession } from "@/lib/session";
import { appDb, schema } from "@/lib/appdb";
import { tadimlikSec } from "@/lib/tadimlik-havuzu";
import { SihirbazBolumu } from "./sihirbaz-cagri-karti";
import { TadimlikSatiri } from "./tadimlik-satiri";
import { ProgramTablosu } from "@/components/program-tablosu";
import { ManuelHarita } from "@/components/manuel-liste/manuel-harita";
import { SiteFooter } from "@/components/site-footer";
import { SiraGerekli } from "./sira-gerekli";

export const metadata: Metadata = {
  title: "Tercih Listeni Kur",
  // Param uzayı sonsuz + içerik sıralamaya göre kişisel: indexlenmez ama
  // link değeri follow ile geri akar. robots.txt'te ENGELLEME — noindex'in
  // görülebilmesi için sayfa taranabilir kalmalı.
  robots: { index: false, follow: true },
};

export default async function SonucPage({
  searchParams,
}: {
  searchParams: Promise<{
    sira?: string;
    tur?: string;
    sihirbaz?: string;
    hazir?: string;
  }>;
}) {
  const params = await searchParams;
  const sira = Number.parseInt(params.sira ?? "", 10);
  const turKey: PuanTuruKey =
    params.tur && params.tur in PUAN_TURLERI
      ? (params.tur as PuanTuruKey)
      : "say";

  if (!Number.isFinite(sira) || sira < 1 || sira > 4_000_000) {
    return (
      <>
        <SiraGerekli />
        <SiteFooter />
      </>
    );
  }

  // Sihirbaz için: kullanıcının kayıtlı raporu var mı? Listenin kendisi
  // /listem'de yaşar; burada yalnızca CTA'nın hangi hâlde render edileceği
  // için varlık bilgisi gerekir.
  const session = await getSession();
  const raporSatiri = session
    ? await appDb.query.reports.findFirst({
        where: eq(schema.reports.userId, session.user.id),
        columns: { result: true },
      })
    : null;

  const facetler = rankWindowFacets(sira, turKey);
  // Yapay Zeka'sız ham liste: yalnızca sıralamayla ulaşılabilen programlar (dilimli)
  const hamSonuclar = searchByRank(sira, turKey, { limitPerBucket: 20 });

  // Girişsiz tadımlık (İP-B): SSR'da kovaya uyan "genel" satır seçilir;
  // sihirbaz kategorisi client'ta okunup /api/tadimlik ile kişiselleştirilir.
  // Girişli kullanıcı gerçek ürünü zaten görebildiği için tadımlık almaz.
  const tadimlik = session ? null : await tadimlikSec(sira, turKey);

  return (
    <div className="min-h-screen bg-slate-50 text-slate-900">
      <main className="mx-auto max-w-4xl px-4 py-12">
        {/* Sayfa hiyerarşisi: önce Türkiye haritası, sonra liste. Manuel
            liste store'una abone olduğundan tablodan "+" ile eklenenler
            buraya canlı yansır. */}
        <ManuelHarita />

        {/* Yapay Zeka'dan bağımsız ham tablo — haritanın hemen altında, sayfanın ana
            gövdesi; puan türü navbar'daki sıralama rozetinden değiştirilir */}
        <ProgramTablosu sonuclar={hamSonuclar} adaySira={sira} tur={turKey} />

        {/* Girişsiz tadımlık: gerçek rapor satırı formatında tek örnek.
            Havuzda içerik yoksa bileşen hiç render edilmez. */}
        {!session ? (
          <TadimlikSatiri sira={sira} tur={turKey} ilk={tadimlik} />
        ) : null}

        {/* Sihirbaz akışı (CTA + modal) — üretim ve liste /listem'de yaşar,
            burada yalnızca funnel kartları render edilir */}
        <SihirbazBolumu
          sira={sira}
          tur={turKey}
          facetler={facetler}
          girisliMi={Boolean(session)}
          raporVar={Boolean(raporSatiri?.result)}
          otomatikAc={params.sihirbaz === "1"}
          secimlerHazir={params.hazir === "1"}
        />

        <p className="mt-10 text-center text-xs leading-relaxed text-slate-500">
          Veriler resmî YÖK Atlas kaynağından derlenmiştir. KolayTercih bir karar
          destek aracıdır; yerleşme garantisi vermez, tercih sorumluluğu adaya
          aittir.
        </p>
      </main>
      <SiteFooter />
    </div>
  );
}
