// Paketsiz kullanıcıya giden raporun sunucu tarafı maskesi.
// YÖK Atlas'ın ham program ve taban sıralaması verileri ücretsiz kalır.
// Yalnızca Yapay Zeka'nın ürettiği kişisel gerekçe/risk/trend yorumu maskelenir;
// böylece istemciye ücretli analiz metni hiç inmez.

import "server-only";
import type {
  MaskeliRapor,
  RaporSonuc,
} from "@/features/rapor/types/rapor";

export const ACIK_SATIR = 3;

const SAHTE_GEREKCE =
  "Bu tercih için kişisel gerekçe paketle açılır.";
const SAHTE_RISK =
  "Sıralamana özel yerleşme riski paketle açılır.";
const SAHTE_TREND =
  "Ham trend verisi ücretsizdir; Yapay Zeka yorumu paketle açılır.";

/** genelDegerlendirme'nin yalnızca ilk 1-2 cümlesini bırakır. */
function degerlendirmeKirp(metin: string): string {
  const cumleler = metin.match(/[^.!?]+[.!?]+/g);
  if (!cumleler || cumleler.length <= 2) return metin;
  return `${cumleler.slice(0, 2).join(" ").trim()} …`;
}

export function raporMaskele(rapor: RaporSonuc): MaskeliRapor {
  const tercihler = rapor.tercihler.map((t, i) =>
    i < ACIK_SATIR
      ? t
      : {
          ...t,
          gerekce: SAHTE_GEREKCE,
          riskNotu: SAHTE_RISK,
          trendOzeti: SAHTE_TREND,
        },
  );

  return {
    tercihler,
    genelDegerlendirme: degerlendirmeKirp(rapor.genelDegerlendirme),
    // Teaser: ilk uyarı açık kalır, kalan uyarıların yalnızca sayısı iner —
    // kilitli metinler istemciye hiç ulaşmaz.
    uyarilar: rapor.uyarilar?.slice(0, 1) ?? [],
    kilitliUyariSayisi: Math.max(0, (rapor.uyarilar?.length ?? 0) - 1),
    // Program adı, üniversite ve 2021–2025 taban sıralamaları ham veridir.
    programlar: rapor.programlar,
    // Kapsam (kaç program bulundu / dağılım uyarlandı mı) dürüstlük bilgisi:
    // paketsiz kullanıcı da görür, maskelenmez.
    kapsam: rapor.kapsam,
  };
}
