import Link from "next/link"; import { ArrowRight, CheckCircle2, RotateCcw, XCircle } from "lucide-react"; import { verifySession } from "@/lib/session"; import { siparisGetir } from "../odeme-queries"; import { kullanicininRaporu } from "@/features/rapor/rapor-queries"; import { iadeEdilecekMi, odemeyiSonuclandir } from "@/lib/odeme"; import { Button } from "@/components/ui/button"; import { PagePixelDivider } from "@/components/pixel-decor"; import { Skeleton } from "@/components/ui/skeleton"; import { RaporYokCta } from "./rapor-yok-cta"; export async function OdemeSonucKarti({ siparis }: { siparis?: string }) { // Oturum düşmüşse geri dönüşte ?siparis= kaybolmasın (başarı/unblur deneyimi) const geriDonus = siparis ? `/odeme/sonuc?siparis=${encodeURIComponent(siparis)}` : "/paket"; // Oturum ve sipariş sorgusu bağımsız; sahiplik kontrolü aşağıda yapılıyor const [session, order] = await Promise.all([ verifySession(geriDonus), siparis ? siparisGetir(siparis) : Promise.resolve(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. "paid" siparişte // de çağrılır — kredisi yazılmamış eski kayıtları onarır (idempotent). const durum = order && sahibiMi ? await odemeyiSonuclandir(order.id) : "not_found"; const basarili = durum === "paid"; // Zaten paketliyken alınan ikinci paket ödemesi: kredi yazılmadı, iade edilir const iade = basarili && order ? await iadeEdilecekMi({ ...order, status: "paid" }) : false; if (iade) { return (

Bu ödeme iade edilecek

Tercih Dönemi Paketi'n zaten aktifti; paket tek seferlik olduğu için bu ikinci ödemeyi iade ediyoruz — senin bir şey yapmana gerek yok. İade en geç 14 gün içinde yapılır; kartına yansıması bankana göre birkaç gün daha sürebilir. Sorun olursa{" "} destek@kolaytercih.com 'a yaz.

); } // 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 kullanicininRaporu(session.user.id) : 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ç . )}

); } // iyzico doğrulaması beklenirken ortalanmış sonuç kartı iskeleti. export function OdemeSonucKartiSkeleton() { return (
); }