import { redirect } from "next/navigation";
import { MessageCircleQuestion, Sparkles } from "lucide-react";
import { verifySession, getCurrentUser } from "@/lib/session";
import { kullanicininRaporu, sohbetGecmisiGetir } from "../rapor-queries";
import { URUNLER, MAX_REVIZYON } from "@/lib/credits";
import type {
  MaskeliRapor,
  RaporParams,
  RaporSonuc,
} from "../types/rapor";
import { ViewportPortal } from "@/components/viewport-portal";
import { SiteFooter } from "@/components/site-footer";
import { Skeleton } from "@/components/ui/skeleton";
import { raporMaskele, ACIK_SATIR } from "@/lib/rapor-maske";
import type { Mesaj } from "./sohbet-client";
import { ListemGovde } from "./listem-govde";
import { ListemBosCta } from "./listem-bos-cta";
import { ListeUretici } from "./liste-uretici";

const PAKET_FIYATI = (URUNLER.paket.amountKurus / 100).toLocaleString("tr-TR", {
  maximumFractionDigits: 0,
});

export async function ListemIcerik({
  uret,
  acildi,
}: {
  uret: boolean;
  acildi: boolean;
}) {
  // Girişsiz gelene callback'i ?uret=1 ile ver: girişten dönüşte bekleyen
  // seçimlerle üretim kaldığı yerden başlasın.
  const geriYol = uret ? "/listem?uret=1" : "/listem";
  const session = await verifySession(geriYol);
  const [user, satir, sohbetGecmisi] = await Promise.all([
    getCurrentUser(),
    kullanicininRaporu(session.user.id),
    sohbetGecmisiGetir(session.user.id),
  ]);
  if (!user) redirect(`/giris?callback=${encodeURIComponent(geriYol)}`);

  const kilitAcilisi = Boolean(user.hasPaket && acildi);
  const raporVar = Boolean(satir?.result);

  if (!raporVar) {
    const bosDurum = (
      <section className="mx-auto flex max-w-2xl flex-col items-center px-4 py-16 text-center">
        <Sparkles className="size-10 text-primary" aria-hidden />
        <h1 className="mt-4 font-heading text-2xl font-bold">
          Henüz Yapay Zeka listen yok
        </h1>
        <ListemBosCta />
      </section>
    );
    return (
      <>
        <main className="mx-auto w-full max-w-4xl px-4 py-12">
          {/* ?uret=1: sihirbazdan yönlendirildi — bekleyen seçimlerle üretim
              burada koşar, animasyon ve hata/kredi durumları burada yaşar. */}
          {uret ? (
            <ListeUretici
              hasPaket={Boolean(user.hasPaket)}
              bosDurum={bosDurum}
            />
          ) : (
            bosDurum
          )}
        </main>
        <SiteFooter />
      </>
    );
  }

  const rapor: MaskeliRapor = user.hasPaket
    ? (satir!.result as RaporSonuc)
    : raporMaskele(satir!.result as RaporSonuc);
  const raporParams = satir!.params as RaporParams;
  // Danışman özeti sohbetin açılış mesajı olarak gösterilir; sohbet
  // /api/soru üzerinden zaten liste + seçim bağlamıyla çalışıyor.
  // Paketsizde rapor zaten maskeli: 1 uyarı açık, kalanının yalnızca sayısı var.
  const danismanOzeti = rapor.genelDegerlendirme
    ? {
        metin: rapor.genelDegerlendirme,
        uyarilar: rapor.uyarilar,
        kilitli: !user.hasPaket,
        kilitliUyariSayisi: user.hasPaket ? undefined : rapor.kilitliUyariSayisi,
      }
    : undefined;

  return (
    <>
    <main className="mx-auto w-full max-w-7xl px-4 py-12">
      {kilitAcilisi ? (
        <div
          role="status"
          className="mb-6 flex items-center gap-3 rounded-2xl border border-emerald-200 bg-emerald-50 px-4 py-3 text-sm font-medium text-emerald-800"
        >
          <Sparkles className="size-4 shrink-0" aria-hidden />
          Paketin aktif — listendeki tercihlerin tamamı, gerekçeler, riskler ve
          PDF artık açık.
        </div>
      ) : null}
      {/* Başlık ve revizyon/PDF aksiyonları listenin kendi başlık satırında
          (bkz. listem-govde.tsx) — sayfa üstünde ayrı bir header yok. */}
      <ListemGovde
        rapor={rapor}
        adaySira={raporParams.sira}
        hasPaket={Boolean(user.hasPaket)}
        kilitAcilisi={kilitAcilisi}
        kilitliBaslangic={user.hasPaket ? undefined : ACIK_SATIR}
        kredi={user.creditBalance}
        sohbetGecmisi={sohbetGecmisi as Mesaj[]}
        ozet={danismanOzeti}
        kalanHak={Math.max(0, MAX_REVIZYON - (satir!.revisionCount ?? 0))}
        paketFiyati={PAKET_FIYATI}
        paketKredi={URUNLER.paket.credits}
      />

      <ViewportPortal>
        <a
          href="#sohbet"
          className="fixed bottom-5 right-4 z-40 inline-flex h-11 items-center gap-2 rounded-full bg-primary px-4 text-sm font-semibold text-white shadow-lg transition-transform duration-200 active:scale-[0.97] lg:hidden print:hidden"
        >
          <MessageCircleQuestion className="size-4" aria-hidden />
          Danışmana sor
        </a>
      </ViewportPortal>
    </main>
    <SiteFooter />
    </>
  );
}

export function ListemIcerikSkeleton() {
  return (
    <main className="mx-auto w-full max-w-7xl px-4 py-10">
      <Skeleton className="h-6 w-40 rounded-full" />
      <Skeleton className="mt-4 h-9 w-3/4 max-w-xl" />
      <Skeleton className="mt-3 h-5 w-2/3 max-w-lg" />
      <div className="mt-8 grid items-start gap-8 lg:grid-cols-[minmax(0,1fr)_340px]">
        <div className="flex flex-col gap-2">
          {Array.from({ length: 10 }).map((_, i) => (
            <Skeleton key={i} className="h-16 w-full rounded-xl" />
          ))}
        </div>
        <Skeleton className="h-[480px] w-full rounded-2xl" />
      </div>
    </main>
  );
}
