import Link from "next/link"; import type { Metadata } from "next"; import { eq } from "drizzle-orm"; import { ArrowRight, CheckCircle2, XCircle } from "lucide-react"; import { verifySession } from "@/lib/session"; import { appDb, schema } from "@/lib/appdb"; import { odemeyiSonuclandir } from "@/lib/odeme"; import { Button } from "@/components/ui/button"; import { PagePixelDivider } from "@/components/pixel-decor"; import { SiteFooter } from "@/components/site-footer"; import { RaporYokCta } from "./rapor-yok-cta"; export const metadata: Metadata = { title: "Ödeme Sonucu", robots: { index: false, follow: false }, }; export default async function OdemeSonucPage({ searchParams, }: { searchParams: Promise<{ siparis?: string }>; }) { const { siparis } = await searchParams; // Oturum düşmüşse geri dönüşte ?siparis= kaybolmasın (başarı/unblur deneyimi) const geriDonus = siparis ? `/odeme/sonuc?siparis=${encodeURIComponent(siparis)}` : "/paket"; const session = await verifySession(geriDonus); const order = siparis ? await appDb.query.orders.findFirst({ where: eq(schema.orders.id, siparis), }) : null; // Yalnızca kendi siparişi görüntülenebilir const sahibiMi = order?.userId === session.user.id; // Self-healing: callback kaybolduysa burada tekrar doğrula const durum = order && sahibiMi ? order.status === "paid" ? "paid" : await odemeyiSonuclandir(order.id) : "not_found"; const basarili = durum === "paid"; // Rapor zaten üretildiyse ödül bir tık uzakta: kullanıcıyı doğrudan // rapor sayfasına döndür ki blur çözülme animasyonuyla tam listeyi görsün. const rapor = basarili ? await appDb.query.reports.findFirst({ where: eq(schema.reports.userId, session.user.id), columns: { id: true }, }) : null; const listeHref = rapor ? "/listem?acildi=1" : null; return (
{basarili ? (

Ödeme alındı 🎉

{order!.credits} kredi {" "} hesabına tanımlandı {order!.product === "paket" ? " ve Tercih Dönemi Paketi'n aktif — kişisel listen, risk raporun ve PDF çıktın hazır olduğunda burada." : "."}

{listeHref ? ( <>

24 tercihin tamamı, gerekçeler, riskler ve PDF artık açık.

) : ( )}
) : (

Ödeme tamamlanamadı

{durum === "pending" ? ( "Ödemen hâlâ işleniyor. Birkaç saniye sonra bu sayfayı yenile — kartından çekim yapıldıysa krediler mutlaka tanımlanır." ) : ( <> Çekim yapılmadı ya da işlem iptal edildi. Kartından para çekildiğini düşünüyorsan{" "} bizimle iletişime geç . )}

)}
); }