import Image from "next/image"; import { redirect } from "next/navigation"; import { verifySession, getCurrentUser } from "@/lib/session"; import { kullanicininRaporu } from "../rapor-queries"; import { PUAN_TURLERI, type DilimKey } from "@/types/yokatlas"; import { DILIM_ETIKET, RISK_ETIKET, dilimdenRisk } from "@/lib/risk"; import type { RaporParams, RaporSonuc } from "../types/rapor"; import { Skeleton } from "@/components/ui/skeleton"; import { YazdirButonu } from "./yazdir-butonu"; // Dilim sütunu: dilim adı + varsayılan riski. Üçüncü dilimde ikisi aynı // kelime ("Güvenli") olduğu için parantez düşer — "Güvenli (Güvenli)" yazmaz. function dilimLabel(dilim: DilimKey): string { const ad = DILIM_ETIKET[dilim] ?? dilim; const risk = RISK_ETIKET[dilimdenRisk(dilim)]; return ad === risk ? ad : `${ad} (${risk})`; } export async function RaporYazdir() { const session = await verifySession("/rapor/yazdir"); // Kullanıcı satırı ile rapor sorgusu bağımsız — paralel çöz const [user, satir] = await Promise.all([ getCurrentUser(), kullanicininRaporu(session.user.id), ]); if (!user) redirect("/giris"); if (!user.hasPaket) redirect("/paket"); if (!satir?.result) redirect("/sonuc"); const rapor = satir.result as RaporSonuc; const params = satir.params as RaporParams; const tarih = new Date(satir.updatedAt).toLocaleDateString("tr-TR", { day: "numeric", month: "long", year: "numeric", }); return (

{rapor.tercihler.length} Tercihlik Kişisel Liste ve Risk Raporu

Başarı sıralaması: {params.sira.toLocaleString("tr-TR")} · Puan türü: {PUAN_TURLERI[params.tur]} {params.il ? ` · İl: ${params.il}` : ""} · {tarih}

{rapor.kapsam?.uyarlandi ? (

Not: Tercihlerine göre {rapor.kapsam.toplam} uygun program bulundu; liste {rapor.kapsam.dagilim.hayal} hayal ·{" "} {rapor.kapsam.dagilim.dengeli} dengeli ·{" "} {rapor.kapsam.dagilim.garanti} güvenli olarak kuruldu.

) : null}

Genel değerlendirme

{rapor.genelDegerlendirme}

{rapor.tercihler.map((t) => { const p = rapor.programlar[t.programId]; return ( ); })}
# Program / Üniversite Dilim Gerekçe Risk notu Trend
{t.sira} {p?.isim}
{p?.universite} · {p?.il ?? "—"}
{dilimLabel(t.dilim)} {t.gerekce} {t.riskNotu} {t.trendOzeti}
); } // Rapor sorgusu beklenirken belge düzeninde iskelet. export function RaporYazdirSkeleton() { return (
{Array.from({ length: 8 }).map((_, i) => ( ))}
); }